我希望在JavaFX上方显示一个文本 - TextField
。设置prompText
几乎是我想要的,但对我的用例有一些缺点。以下代码似乎有效,但向Label
的子项添加TextField
会感觉不对。以下代码是否违反任何JavaFX原则或使用是否安全?
public class MyTextField extends TextField {
public MyTextField() {
Label label = new Label("test");
this.getChildren().add(label);
}
}
答案 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);
}
}