我所有的JavaFX文本框中都有线条

72

目前我正在学习JavaFX,进展顺利。

然而,所有的文本字段都有一条线从顶部开始延伸10像素左右。

不仅在我的应用程序中是这样,在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 主题有关。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);
    }
}

示例表单截图

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)

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

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

Caspian主题视图


2
有什么有趣的CSS吗? - Evan Knowles
1
看起来由于某种原因,升高线被绘制了。很奇怪。 - isnot2bad
3
当您下载样例并启动JavaFX Ensemble时,会是什么样子? - Roland
1
好的,那真的很奇怪。你是如何设置你的应用程序的? 有没有明确设置? - Marcel
6
可以提供更多的代码吗?这样我们就可以查看它...(或者在自己的计算机上尝试重现该问题)。 - rzo1
显示剩余21条评论
2个回答

7
这是一个已知未解决的错误
问题似乎在于开发人员无法重现。
在错误报告的评论中,建议使用jvm参数:
-Dprism.disableRegionCaching=true

然而,如果有人能够重现这个非常罕见的 bug,我的建议是:

  • 修改 Modena CSS 文件直到问题得到解决,并分享这些信息。因为 Caspian 看起来可以正常工作,所以这可能会有所帮助。
  • 如果必要,调试 JavaFX 源代码以隔离问题。然而,问题可能更深层次,但值得一试。

1

嗯...我不是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);
    }

}

这段文字的英译中文如下:

运行的应用程序看起来像这样:

图像A:

enter image description here

...所以黑线出现在文本字段中,与Vgap设置为10有关,距离约为10像素;此外,“欢迎”文本被划掉但带有垂直线;我测试了scenetitle不使用字体后位置正确(请参见图片);

图像B

enter image description here

我猜GridPane可能有问题;也许默认的GridPane有“可见线条”,但是在添加组件后,这些线条“消失了”,但因为TextField应该包含带有“字体”的“文本”(参见图像A,“垂直线穿过文本是由于字体”),重新绘制无法正常工作,您可以看到图像A显示的顶部黑线;我无法完全模拟效果,但仍然可以建议“未处理”线可能来自哪里等等 :)
我将尝试进一步分析,无论如何,我在此答案中描述的信息可能会帮助您找到开始调试的位置;
如果需要其他信息,请告诉我;
祝你好运 :)
我用于测试的工具包:
jdk-1.0.8_25 jre-1.8.0_60(Linux x64) ide:netbeans 8.0.1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接