【问题标题】:Clear TextField From Another Class从另一个类中清除 TextField
【发布时间】:2014-08-07 11:06:26
【问题描述】:

在我的主要 FXML 控制器类 Alpha 中,我有一个带有文本字段的掩码和一个清除它的按钮:

@FXML
private TextField testTF = new TextField();

@FXML
public void clearText() {
    if (testTF != null)
    testTF.clear();
}

如果我在文本字段中输入文本并点击清除按钮,文本将被删除。到目前为止,一切都很好。

我有第二个控制器类 Beta。对应的 fxml 文件包含菜单布局(菜单栏)。如果单击“新建”菜单项,它还应该清除我在 Alpha 类中的文本字段。

public class Beta {
    private void newApp() {
        Alpha a = new Alpha();
        a.clear();
    }
}

但什么也没发生。我在这里做错了什么?如何单击 FXML 控制器类中的按钮/菜单项并让它清除另一个 FXML 控制器类中的文本字段?

【问题讨论】:

  • 您正在创建一个新对象Alpha,因此您无法从现有对象创建一些东西。我确信您确实清除了这个新对象,但它可能不是您要清除的对象。
  • @Kyllopardiun 谢谢。我就是这么想的。感谢 Forager 的帮助,我能够解决我的问题。

标签: java javafx


【解决方案1】:

您不应使用new TextField(); 实例化 testTF:FXMLLoader 将自动为 testTF 分配相应的 TextField 对象,因为您有一个 @FXML 标记。

您正在 Beta 类中重新实例化 Alpha,该类与加载 fxml 时创建的类分开存在,从而产生两个单独的 private TextField testTF 对象。要么给Beta 引用Alpha 的第一个实例,要么试试这个替代方案:

    public class Alpha implements Initializable {

        public static TextField tf;

        @FXML
        private TextField testTF;

        @Override
        public void initialize(URL location, ResourceBundle resources) {
            tf = testTF;
        }
    }

    public class Beta {
        private void newApp() {
            if (Alpha.tf != null)
                Alpha.tf.clear();
        }
    }

【讨论】:

  • 非常感谢!你的替代品就像一个魅力。如果我必须对多个文本字段进行引用,那么引用另一个类会更容易吗?我该怎么做?到目前为止,我还没有在 javafx 中使用过引用。代码中的小语法更正:它是“clear()”而不是“clearText()”。
  • 哦,你在 Alpha 版中使用了 clear(),在 beta 版中使用了 clearText()。如果你真的想为你的整个班级提供参考,你可以在你的初始化方法中创建public static Alpha instance; 并使用instance = this,或者根据你的需要构建ArrayList<TextField>ArrayList<Node>
  • 再次感谢!我现在一切正常。我已将参考示例的代码添加到您的帖子中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 2016-11-04
相关资源
最近更新 更多