lista - Todos mis campos de texto JavaFX tienen líneas
label javafx (2)
Entonces, cortando mis dientes en JavaFX, hasta ahora las cosas se están moviendo bien.
Sin embargo, todos los campos de texto tienen una línea que los atraviesa, aproximadamente 10 px desde la parte superior.
No solo en mi aplicación, sino también en la aplicación SceneBuilder.
Tenga en cuenta que no estoy usando ningún CSS explícito, no sé qué utiliza SceneBuilder. La captura de pantalla es de SceneBuilder, mis pantallas se ven idénticas.
Entonces, es algo fundamental.
java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
En Mac OS 10.9.5
Es curioso si alguien más ha visto esto y tiene una sugerencia.
Editar: descargué las muestras, claramente tiene algo que ver con el tema de Módena.
El tema del Caspio se ve muy bien.
A continuación se muestra una captura de pantalla de la sección Modena.jar TextFields.
Es interesante que
TextArea
sufra un problema similar, aunque no tan universalmente como
TextField
.
Más adiciones:
La gente sigue clamando por esto, así que aquí está. Básicamente, acabo de seguir esto: https://docs.oracle.com/javafx/2/get_started/form.htm y uso un proyecto de aplicación JavaFX predeterminado de Netbeans 8.0.2. Solo córtalo y pégalo desde el sitio web.
public class Fxlinetest extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX Welcome");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
Text scenetitle = new Text("Welcome");
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
grid.add(scenetitle, 0, 0, 2, 1);
Label userName = new Label("User Name:");
grid.add(userName, 0, 1);
TextField userTextField = new TextField();
grid.add(userTextField, 1, 1);
Label pw = new Label("Password:");
grid.add(pw, 0, 2);
PasswordField pwBox = new PasswordField();
grid.add(pwBox, 1, 2);
Button btn = new Button("Sign in");
HBox hbBtn = new HBox(10);
hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
hbBtn.getChildren().add(btn);
grid.add(hbBtn, 1, 4);
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
Aquí hay una captura de pantalla de la vista ThreeDOM de ScenicView 8.6, observe la línea:
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
Aquí está la pantalla de muestra usando el tema Caspio a través de:
System.setProperty("javafx.userAgentStylesheetUrl", "caspian");
Emm ... No estoy 100% seguro porque no tengo el efecto en mi jvm aunque tengo la plataforma Linux; Pero aun así traté de emular (? No estoy seguro de haber tenido éxito bastante bien) de todos modos, supongo que el problema que describe puede estar realmente relacionado con
- a) fuente
- b) problema de repintado
El código que representaste lo modifiqué un poco para mostrar lo que sucede con las líneas del panel de cuadrícula si los componentes se encuentran en "algún" orden;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class BlackLineIssueJavaFXApplication1 extends Application {
@Override
public void start(Stage primaryStage) {
System.setProperty("javafx.userAgentStylesheetUrl", "Modena");
//Modena,caspian
primaryStage.setTitle("JavaFX Welcome");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
// grid.setGridLinesVisible(false);//<---
Text scenetitle = new Text("Welcome");//original
// Label scenetitle = new Label("Welcome");//modified
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));//original
// scenetitle.setFont(Font.font("Verdana", FontWeight.LIGHT, 30));//modified
grid.add(scenetitle, 0, 0, 2, 1);//original
// grid.add(scenetitle, 0, 0);//modified
Label userName = new Label("User Name:");//original
// Text userName = new Text("User Name:");
// userName.setFont(Font.font("Tahoma", FontWeight.NORMAL, 11));
// grid.add(userName, 0, 1);//original
grid.add(userName, 0, 1,1,2);//modified
grid.setGridLinesVisible(true);//<---
TextField userTextField = new TextField();
// userTextField.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));//modified
userTextField.setOpacity(0.5);//<----
// grid.add(userTextField, 1, 1);//original
grid.add(userTextField, 1, 1,1,2);//modified
grid.setGridLinesVisible(false);//<---
Button btn = new Button("Sign in");
HBox hbBtn = new HBox(10);
hbBtn.setAlignment(Pos.BOTTOM_RIGHT);
hbBtn.getChildren().add(btn);
grid.add(hbBtn, 1, 4);//original
//grid.add(hbBtn, 1, 3);//modified
final Text actiontarget = new Text();
grid.add(actiontarget, 1, 6);
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
La aplicación en ejecución se ve así:
Imagen A:
... por lo que la línea negra aparece en el campo de texto a una distancia de aproximadamente 10 píxeles, tal vez solo porque Vgap se estableció en 10; Además, vea que el texto de "bienvenida" está cruzado pero con líneas verticales; Probé si "no usar fuente" para scenetitle se encuentra correctamente (ver imagen);
Imagen B
Entonces, algo puede estar mal con GridPane, supongo; Tal vez el GridPane predeterminado tiene "líneas visibles" o algo así, pero después de que los componentes agregaron las líneas "desechadas", pero debido a TextField que debería contener "texto" con "fuente" (ver imagen A las líneas verticales cruzan el texto debido a la fuente ) la pintura no no funciona correctamente y puede ver la línea negra en la parte superior como muestra la imagen A; No puedo emular el efecto por completo, pero aun así puedo sugerir de dónde puede venir la línea "sin desechar" o algo así :)
Intentaré analizar un poco más de todos modos, la información que describo en esta respuesta puede ayudarlo a encontrar dónde comenzar a depurar;
Si necesita información adicional, hágamelo saber;
Buena suerte :)
kit de herramientas que solía probar:
- jdk-1.0.8_25
- jre-1.8.0_60 (Linux x64)
- ide: netbeans 8.0.1
Este es un error conocido no resuelto .
El problema parece ser que no es reproducible para los desarrolladores.
En los comentarios del informe de error, se sugiere el uso de un parámetro jvm:
-Dprism.disableRegionCaching=true
Sin embargo, si alguien puede reproducir este error muy raro, mi sugerencia es:
- modifique el archivo modena css hasta que se resuelva el error y comparta esa información. puede ayudar ya que el caspio parece funcionar.
- si es necesario, depure la fuente javafx para aislar el problema. sin embargo, el problema puede ser más profundo, pero vale la pena intentarlo