在我的主 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/