JavaFX:将标签作为子项添加到文本字段

use*_*698 5 java javafx

我想要在 JavaFX- 上方显示文本TextField。设置prompText几乎是我想要的,但对于我的用例来说有一些缺点。下面的代码似乎可以工作,但是将 a 添加Label到 的子级感觉是错误的TextField。以下代码是否违反任何 JavaFX 原则或者使用安全吗?

public class MyTextField extends TextField {    
    public MyTextField() {
        Label label = new Label("test");
        this.getChildren().add(label);
    }  
}
Run Code Online (Sandbox Code Playgroud)

Men*_*ine 2

基于 :

以下代码是否违反任何 JavaFX 原则或者使用安全吗?

java中,这段代码使用起来并不安全,因为你在构造函数中调用了Overridable方法 ,如果你使用Netbeans或任何智能IDE,它会警告你一条消息"Overridable method call in constructor",并且问题的描述如下:

在构造函数中调用可重写的方法可能很危险,因为在调用重写方法时,对象尚未完全初始化。

其次,您可以在 Region、Group、Containers 中添加子节点,但向控件添加子节点并不是一个好的做法,如果您需要向 TextField 添加标签,您可以使用 ControlFx的 CustomTextField ,这个代码示例可能会有所帮助根据您的需要:

     Label myLabel=new Label("Hello");
    /*You use a container if you need add many nodes in CustomTextField*/
    //HBox box=new HBox();
    //box.getChildren().add(myLabel);
    CustomTextField customField=new CustomTextField();
    customField.setRight(mylabel);
    //customField.setLeft(mylabel);
    //customField.setRight(box);
Run Code Online (Sandbox Code Playgroud)

或者通过扩展 CustomTextField :

//This code is safe and the warning is removing here
public class MyTextField extends CustomTextField {

        public MyTextField() {
            Label label = new Label("test");
            this.setRight(label); 
        }
    }
Run Code Online (Sandbox Code Playgroud)