java - 从另一个类中清除 TextField

标签 java javafx

在我的主 FXML Controller 类 Alpha 中,我有一个带有文本字段的掩码和一个用于清除它的按钮:

@FXML
private TextField testTF = new TextField();

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

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

我有第二个 Controller 类 Beta。相应的fxml文件包含菜单布局(菜单栏)。如果单击菜单项“new”,它还应该清除 Alpha 类中的文本字段。

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

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

最佳答案

您不应该使用 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();
        }
    }

关于java - 从另一个类中清除 TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25180927/

相关文章:

java - 如何使 CSV 文件包含多个用户

mysql - JavaFX TableView 仅重复显示来自 MySQL 数据库的最后一行数据

java - Netty 和 JavaFX 出现 "Not on FX application thread"异常

java - Java SwingWorker取消是合作的吗?

java - 如何一次导入/导出所有Hbase表?

java - 检测未安装的 java 并提供来自 Javascript 的链接

java - 在自定义 JavaFX FXML 控件上添加特定节点列表

java - 如何升级JRE

java - 如何在 Java 中生成与 Python 示例等效的 HMAC?

java - 更改 JavaFX 文本区域中所选内容的前景色