我所有的JavaFX TextField都有行

Wil*_*ung 72 java textbox javafx

所以,在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)
Run Code Online (Sandbox Code Playgroud)

Mac OS 10.9.5上

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

编辑:我下载了样本,这显然与Modena主题有关.Caspian主题看起来很好.以下是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

样本表单截图

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)
Run Code Online (Sandbox Code Playgroud)

这是来自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)
Run Code Online (Sandbox Code Playgroud)

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

    System.setProperty("javafx.userAgentStylesheetUrl", "caspian");
Run Code Online (Sandbox Code Playgroud)

里海主题视图

Rol*_*and 7

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

问题似乎是开发人员无法重现.

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

-Dprism.disableRegionCaching=true
Run Code Online (Sandbox Code Playgroud)

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

  • 修改modena css文件,直到错误解决并共享该信息.它可能会有所帮助,因为里海似乎有效.
  • 如有必要,调试javafx源以隔离问题.然而,问题可能会更深入,但值得一试


use*_*525 1

嗯...我不是 100% 确定,因为尽管我有 Linux 平台,但我对 jvm 没有影响;但我仍然尝试模仿(?不确定我成功得很好)无论如何,我想你描述的问题可能与

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

}
Run Code Online (Sandbox Code Playgroud)

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

图片A:

在此输入图像描述

...所以黑线出现在距离大约 10px 的文本字段中,可能只是因为 Vgap 设置为 10;此外,看到“欢迎”文字是交叉的,但有垂直线;我测试了场景标题的“不使用字体”是否正确定位(见图);

图B

在此输入图像描述

所以我猜 GridPane 可能有问题;也许默认的 GridPane 具有“可见的线条”或其他内容,但是在组件添加了“已配置”的线条之后,但由于 TextField 应该包含带有“字体”的“文本”(参见图像由于字体而导致垂直线与文本交叉),因此重绘不会无法正常工作,您可以看到顶部有黑线,如图 A 所示;我无法完全模拟效果,但我仍然可以建议“未处理”线可能来自何处或其他什么:)

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

如果您需要一些其他信息,请告诉我;

祝你好运 :)

我用来测试的工具包:

  • jdk-1.0.8_25
  • jre-1.8.0_60 (Linux x64)
  • IDE:netbeans 8.0.1