我所有的 JavaFX TextFields 中都有行

因此,我在 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频道

只是好奇是否有其他人看过这个并有建议。

编辑: 我下载了样本,很明显是和摩德纳主题有关。里海主题看起来不错。下面是来自 Modena.jar TextFields 部分的截图。有趣的是,TextArea也遇到了类似的问题,尽管不像 TextField那样普遍。

Modena.jar screenshot

更多补充:

人们一直吵着要这个,所以就这样了。我实际上只是遵循以下步骤: https://docs.oracle.com/javafx/2/get_started/form.htm并使用默认的 Netbeans 8.0.2 JavaFX Application 项目。从网站上剪贴下来就行了。

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

Sample Form Screenshot

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中 Three DOM 视图的屏幕截图,注意下面这行: ThreeDOM view from ScenicView -- notice the line

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

Caspian Theme view

2235 次浏览

嗯... ... 我不是100% 确定,因为虽然我有 Linux 平台,但是我没有在我的 jvm 上产生影响; 但是我仍然试图模仿(?我不确定我是否成功)不管怎样,我想你描述的问题可能真的与

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


}

正在运行的应用程序看起来是这样的:

图片 A:

enter image description here

所以黑线出现在距离大约10px 的文本领域,可能只是因为 Vgap 设置为10; 此外,看到“欢迎”文本被跨越,但与垂直线; 我测试了如果“不使用字体”剧名它的位置正确(见图片) ;

图片 B

enter image description here

所以我猜 GridPane 可能有点问题; 也许默认的 GridPane 有 “可见线条”或者其他什么东西,但是在组件添加了“弃置”的行之后,但是由于 TextField 应该包含“ text”和“ font”(见图 A 由于字体的原因,垂直线跨越文本) ,重新绘制不能正常工作,你可以看到图 A 显示的顶部的黑线; 我不能完全模仿效果,但是我仍然可以建议“未弃置”的线可能来自哪里或者其他东西:)

我将尝试进一步分析一点,无论如何,我在这个答案中描述的信息可能会帮助你找到从哪里开始调试;

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

祝你好运

我用来测试的工具包:

  • Jdk-1.0.8 _ 25
  • Jre-1.8.0 _ 60(Linux x64)
  • IDE: netbeans 8.0.1

这是 已知未解决的漏洞

问题似乎是它不能为开发人员重现。

在 bug 报告的注释中建议使用 jvm 参数:

-Dprism.disableRegionCaching=true

然而,如果有人能够复制这个非常罕见的错误,我的建议是:

  • 修改 modena css 文件,直到 bug 得到解决并共享该信息。这可能有帮助,因为凯斯宾似乎工作。
  • 如果需要,调试 javafx 源代码以隔离问题。然而,问题可能会更深入,但值得一试吗