[英]Updating UI Components of One Stage Based On Event in Another Stage in JavaFX
我有两个Stages
,例如Stage1和Stage2。 Stage1有一个ListView
和一个Button
。 Stage1上的OnPressing按钮上,我打开一个对话框,即Stage2。 Stage2具有TextField
和一个Button
。 如果我在TextField中输入字符串并单击按钮,则关闭上一个Stage1。 现在,我要在单击stage2按钮后更新ListView。
当我按下按钮打开对话框时,我没有关闭Stage1。
我在stage2上使用showAndWait函数
window.showAndWait();
并使用关闭它
stage.close();
以上是阶段的一部分。 我还想根据stage2中的按钮刷新其他组件。
有人可以建议我这样做吗?
这取决于您使用的是FXML还是仅进行编码。
但是在以下两种方式中,任何一种方式都是相同的:
您需要将两个阶段都包含在变量中。 然后添加一个onAction
事件侦听器,它将在其中触发您的阶段2为stage2.showAndWait()
。
至于文本字段和列表。 您需要使用简单的arrayList.add();
添加到该列表arrayList.add();
然后将新列表传递到您的listView FXController.ObservableArrayList(arrayList)
然后更新或“刷新”该listView,由于没有方法可以“刷新”,而是通过设置listView.setVisible(false);
;,这是不确定的listView.setVisible(false);
并且listView.setVisible(true)
做到了!!
如果您希望它是“自动的”,则必须在onAction
事件中添加所有内容!
祝好运
如果您有代码,我会提供一个更好的示例,但我想我已经解决了所有问题。
我接受@James_D的建议并“刷新”了ListView
。 我打算将一个项目添加到ListView
并根据Button
事件对其进行更新。
如果项目成功添加到列表中,则在controller
处理了按钮事件,并调用了refreshListView()。 基本上,我意识到,一旦关上stage2,控件便会返回给Stage1控制器。 所以我写了下面的代码:
@FXML
private void handleAddNewItem(ActionEvent event) throws IOException {
boolean flag = mNewBox.display();
if(flag==true){
refreshListView();
}
}
public void refreshListView() {
List<String> list = new ArrayList<String>();
list = singleton.getFiles();
items = FXCollections.observableArrayList(list);
itemsListView.setItems(items);
}
感谢您的建议!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.