【问题标题】:Javafx Textfield - getText() empty?Javafx Textfield - getText() 为空?
【发布时间】: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注释的变量。

标签: java javafx textfield


【解决方案1】:

看来我不应该使用“thresholdBox = new TextField();”在我的初始化函数中,因为它覆盖了我的 fxml TextField。

感谢 James_D 的回答。

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多