我所有的JavaFX TextField都有行

时间:2015-06-07 20:44:51

标签: java javafx textbox

所以,在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主题有关。 Caspian主题看起来很好。以下是Modena.jar TextFields部分的屏幕截图。有趣的是,TextArea遇到了类似的问题,但并不像TextField那样普遍。

Modena.jar screenshot

更多附录:

人们一直在吵着要这么做,所以现在就是这样。我基本上只是遵循这个: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);
    }
}

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的ThreeDOM视图的屏幕截图,请注意以下行: 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)

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

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

Caspian Theme view

2 个答案:

答案 0 :(得分:7)

这是known unresolved bug

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

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

-Dprism.disableRegionCaching=true

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

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

答案 1 :(得分:1)

嗯......虽然我有Linux平台,但我并不是百分百肯定因为我没有对我的jvm产生影响;但我仍然试图模仿(?不确定我是否成功)反正我猜你所描述的问题可能与

有关
  • a)font
  • b)重绘问题

你代表的代码我修改了一下,以显示如果组件位于" some"订购;

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;此外,请参阅&#34; welcome&#34;文字交叉但有垂直线;我测试了是否&#34;不使用字体&#34;对于 scenetitle 它正确定位(见图);

图片B

enter image description here

因此我猜测GridPane可能有问题;也许默认的GridPane有&#34;行可见&#34; 或其他东西,但在组件添加了行&#34; dispos&#34;但是因为TextField应该包含&#34; text&#34;使用&#34; font&#34; (参见图像A 垂直线交叉文字,因为字体)重绘不能正常工作,你可以看到顶部的黑线,如图A所示;我不能完全模仿这个效果,但我仍然可以建议在哪里&#34; un-dispos&#34;线可能来自或者什么:)

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

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

祝你好运:)

我曾经测试过的工具包:

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