我所有的JavaFX TextField中都有行

所以,在JavaFX上削减我们的牙齿,到目前为止,事情正在顺利进行。

但是,所有的文本字段都有一行,从顶部开始是10px左右。

不仅在我的应用程序中,而且在SceneBuilder应用程序中。

请注意,我没有使用任何显式的CSS,我不知道SceneBuilder使用什么。 屏幕截图来自SceneBuilder,我的屏幕看起来完全相同。

JavaFX TextFields

所以,这是根本的。

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) 

Mac OS 10.9.5上

只是好奇,如果有人看到这个,并有一个build议。

编辑:我下载了样品,这显然是与摩德纳主题。 里海主题看起来很好。 以下是Modena.jar TextFields部分的屏幕截图。 有趣的是, TextArea遭受类似的问题,虽然不像TextField那样普遍。

Modena.jar截图

更多补充:

人们不停地叫嚷着,所以在这里。 我基本上只是遵循这个: https : //docs.oracle.com/javafx/2/get_started/form.htm,并使用默认的Netbeans 8.0.2 JavaFX应用程序项目。 只需从网站上剪切并粘贴即可。

 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) 

以下是ScenicView 8.6的ThreeDOM视图的屏幕截图,请注意以下几行: 从ScenicView的ThreeDOM视图 - 注意行

 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) 

以下是使用里海主题的示例屏幕:

  System.setProperty("javafx.userAgentStylesheetUrl", "caspian"); 

里海主题景观

这是一个已知的未解决的错误 。

问题似乎是开发者无法重现。

在错误报告的评论中,build议使用jvm参数:

 -Dprism.disableRegionCaching=true 

但是,如果有人能够重现这个非常罕见的错误,我的build议是:

  • 修改modena css文件,直到bug解决并共享该信息。 它可能有帮助,因为里海似乎工作。
  • 如有必要,debugging到javafx源来隔离问题。 然而,问题可能会更深入,但是值得一试

嗯…我不是100%肯定,因为我没有对我的jvm的影响,虽然我有Linux平台; 但是,我仍然试图模仿(不知道我成功了很好)反正我猜你所描述的问题可能真的有关

  • a)字体
  • b)重绘问题

你代表的代码我修改了一下,以显示如果组件位于“一些”顺序会发生什么样的网格面板线,

 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); } } 

正在运行的应用程序如下所示:

图片 – 答:

在这里输入图像说明

…所以黑线出现在距离约10px的文本字段也许只是因为Vgap设置为10; 此外,看到“欢迎”文本是交叉的,但有垂直线条; 我testing如果“不使用字体”的scenetitle它正确定位(见图片);

图片B

在这里输入图像说明

所以我想GridPane可能有些问题。 也许默认的GridPane具有“行可见”或某些东西,但组件添加了“处置”的行后,但由于TextField应该包含“文本”与“字体”(见图像由于字体的垂直线交叉文本 )repaint doesn如图A所示,您可以看到顶部的黑线; 我无法完全效仿这个效果,但是我仍然可以build议“未处理”的行可能来自哪里或什么的:)

我将尝试进一步分析一下,我在这个答案中描述的信息可能会帮助您find从哪里开始debugging;

如果你需要一些额外的信息,请让我知道;

祝你好运 :)

我用来testing的工具包:

  • JDK-1.0.8_25
  • jre-1.8.0_60(Linux x64)
  • ide:netbeans 8.0.1