在我的主要FXML控制器类Alpha中,我有一个带有文本字段的掩码和一个清除它的按钮:
@FXML
private TextField testTF = new TextField();
@FXML
public void clearText() {
if (testTF != null)
testTF.clear();
}
如果我在文本字段中输入文本并点击清除按钮,则文本将被删除。到目前为止,一切都很好。
我有第二个控制器类Beta。相应的fxml文件包含菜单布局(菜单栏)。如果菜单项" new"单击,它也应该清除我在Alpha类中的文本字段。
public class Beta {
private void newApp() {
Alpha a = new Alpha();
a.clear();
}
}
但没有任何事情发生。我在这做错了什么?如何单击FXML控制器类中的按钮/菜单项并使其清除另一个FXML控制器类中的文本字段?
答案 0 :(得分:1)
您不应该使用new TextField();
实例化testTF:FXMLLoader会自动分配testTF
对应的TextField
对象,因为您有@FXML标记。
您在类Alpha
中重新实例化Beta
,它与加载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();
}
}
的第一个实例,要么尝试这个替代方案:
{{1}}