JavaFX:将Label作为子项添加到TextField

时间:2017-12-13 14:20:02

标签: java javafx

我希望在JavaFX上方显示一个文本 - TextField。设置prompText几乎是我想要的,但对我的用例有一些缺点。以下代码似乎有效,但向Label的子项添加TextField会感觉不对。以下代码是否违反任何JavaFX原则或使用是否安全?

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

1 个答案:

答案 0 :(得分:1)

基于:

  

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

java 中,此代码使用起来不安全,因为您致电Overridable method in constructor 如果你使用Netbeans或任何智能IDE,它会用"Overridable method call in constructor"消息警告你,问题的描述是:

  

调用可被覆盖的方法可能会很危险   contructor,因为在被调用的方法被调用的那一刻   该对象未完全初始化。

其次,您可以在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);

或者通过扩展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); 
        }
    }