我所有的JavaFX TextField中都有行


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主题有关。里海主题看起来很好。下面是Modena.jar TextFields部分的屏幕截图。有趣的是TextArea,尽管普遍存在的问题还不如TextField

Modena.jar截图

更多附录:

人们一直为此而大叫,所以就在这里。我基本上遵循以下步骤: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);
    }
}

样本表格截图

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

里海主题视图


2
任何有趣的CSS?
Evan Knowles 2015年

1
看起来由于某种原因绘制了上升线。奇怪。
isnot2bad 2015年

3
当您下载样本并启动javafx ensemble时,它看起来如何?
罗兰

1
好吧,那真的很奇怪。您是如何设置您的应用程序的?有什么明确的设置吗?
Marcel 2015年

6
也许您可以提供更多代码?因此,我们可以看一下...(或尝试在自己的计算机上重现该问题)
rzo

Answers:


7

这是一个未解决已知错误

问题似乎是开发人员无法复制。

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

-Dprism.disableRegionCaching=true

但是,如果任何人都可以重现此非常罕见的错误,我的建议是:

  • 修改modena css文件,直到错误解决并共享该信息。由于里海似乎有效,因此可能会有所帮助。
  • 如有必要,请调试到javafx源中以隔离问题。但是,问题可能会更严重,但值得一试

1

嗯...我不确定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:

在此处输入图片说明

...所以黑线出现在文本字段中的距离约为10像素,可能仅仅是因为Vgap设置为10;此外,请参阅“欢迎”文本,但带有垂直线;我测试了是否正确放置了场景标题“不使用字体” (参见图片);

图片B

在此处输入图片说明

因此,我猜GridPane可能出了点问题;也许默认的GridPane具有“可见的线条”之类的东西,但是在组件添加了“ disposed ”的线条之后,由于TextField应该包含带有“ font”的“ text”(请参见image垂直线由于字体而与文本交叉),因此重新绘制不会工作不正常,您会在顶部看到黑线,如图A所示;我无法完全模拟这种效果,但仍然可以建议“未处理的”行可能来自何处:)

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

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

祝好运 :)

我用来测试的工具包:

  • jdk-1.0.8_25
  • jre-1.8.0_60(Linux x64)
  • ide:netbeans 8.0.1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.