JavaFX中Label的setText方法失效问题求助
解决JavaFX Label文本不更新的问题
我来帮你梳理下代码里的问题,这几个小细节导致你的Label文本没变化:
1. daten标签缺少@FXML注解
你在Controller里声明了private Label daten;,但没有加上@FXML注解。FXML加载器只会把带有@FXML注解的变量和FXML文件中对应fx:id的节点绑定,所以现在daten其实是null,调用daten.setText()不仅不会生效,还会抛出空指针异常(你可以检查下控制台的报错信息)。
修改方法:给daten加上@FXML注解:
@FXML private Label daten;
2. 初始化逻辑没有被执行
你自定义了init()方法来设置文本,但这个方法从来没被调用过!Initializable接口的initialize方法是FXML加载完成后自动执行的初始化入口,你的initialize方法是空的,所以init()里的代码根本没机会运行。
修改方法:在initialize方法里调用init(),或者直接把文本设置代码写到initialize中:
@Override public void initialize(URL url, ResourceBundle rb) { // 调用自定义的init方法 init(); // 或者直接写在这里 // name.setText("Hello World!"); // daten.setText("AnotherTest"); }
额外优化:移除冗余的id属性
FXML里的<Label id ="name" fx:id="name"...>中,id是用于CSS选择器的属性,如果你不需要用CSS选中这个Label,完全可以删掉id="name",只保留fx:id="name"就够了,避免冗余。
修改后的完整Controller代码:
package presentation; import java.net.URL; import java.util.ResourceBundle; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; public class DataController implements Initializable { @FXML private Label name; @FXML private Label daten; @Override public void initialize(URL url, ResourceBundle rb) { name.setText("Hello World!"); daten.setText("AnotherTest"); } }
做完这些修改后,重新运行程序,你应该就能看到两个Label的文本正常显示了。
内容的提问来源于stack exchange,提问作者Jonas Ricke
相关产品推荐
相关产品推荐

