【发布时间】:2017-04-05 17:38:33
【问题描述】:
我在 FXML 中创建的 javafx 中有一个 TextField。它链接到一个名为“thesholdBox”的变量(如下所示,实例化不显示)。我让字段监听 KeyEvents,但每当我在字段中输入值时,“getText()”总是返回一个空字符串。
Java 代码:
@FXML
public void threshBox(KeyEvent e) {
//always empty unless I set it manually using "thresholdBox.setText("TESTING")" or something
String newValue = thresholdBox.getText();
System.out.println("Text: " + newValue);
}
FXML:
<TextField fx:id="thresholdBox" layoutX="255.0" layoutY="5.0" onKeyTyped="#threshBox" prefHeight="31.0" prefWidth="91.0" promptText="0.00" />
截图示例:
现在,通常我希望 thresholdBox.getText() 返回“TEST”。测试表明代码肯定被触发了,但每次传递总是给我一个空字符串。有人知道为什么是这样吗?我对 Javafx 还很陌生,虽然我在文档中没有看到任何关于为什么会发生这个问题的信息,但我完全有可能错过了一些东西。
如果我能让我的问题更清楚一些,请告诉我。
谢谢!
更新:相关代码 -
//here are the only two other places thresholdBox is used.
//I cropped irrelevant variable declarations, since they do not interact with thresholdBox.
//class variable
@FXML
TextField thresholdBox;
@Override
public void initialize(URL url, ResourceBundle rb) {
thresholdBox = new TextField();
}
【问题讨论】:
-
能贴出控制器的相关部分吗? IE。引用
thresholdBox的所有内容(声明、其他方法中的任何引用等)? -
没问题,等一下。好的,问题已编辑。
-
不要使用
thresholdBox = new TextField()... 您将一个新的文本字段分配给thresholdBox(替换FXML 文件中定义的那个)。因此,当您调用getText()时,您将获得新文本字段的文本(甚至不显示),而不是您在 FXML 中创建的文本。 -
太棒了!看起来是这样做的。我现在正在获得价值。谢谢你:)
-
底线是您应该永远将值分配给使用
@FMXL注释的变量。