在 JavaFX 中根据另一个阶段中的事件更新一个阶段的 UI 个组件
Updating UI Components of One Stage Based On Event in Another Stage in JavaFX
我有两个Stages
,例如Stage1和Stage2。 Stage1 有一个 ListView
和一个 Button
。 OnPressing 按钮出现在 Stage1 上,我打开一个对话框,即 Stage2。 Stage2 有 TextField
和一个 Button
。如果我在 TextField 中输入一个字符串并单击按钮,我将关闭之前的 Stage1。
现在,我想在单击 stage2 按钮后更新 ListView。
当我按下按钮打开对话框时,我没有关闭 Stage1。
我在 stage2 使用 showAndWait 函数
window.showAndWait();
并使用
关闭它
stage.close();
以上是舞台的一部分。我还想根据 stage2 中的按钮按下刷新其他组件。
任何人都可以建议我一个方法吗?
这取决于您是使用 FXML 还是只是编码。
但这两种方式中的任何一种方法都是相同的:
您需要将两个阶段都设置为变量。然后添加一个 onAction
事件侦听器,它将触发您的第 2 阶段 stage2.showAndWait()
.
至于文本字段和列表。您需要使用简单的 arrayList.add();
添加到该列表,然后将新列表传递给您的 listView FXController.ObservableArrayList(arrayList)
然后更新或 "refresh" 该 listView 最近有点不确定,因为没有方法"refresh" 但通过设置 listView.setVisible(false);
和 listView.setVisible(true)
就成功了!!
如果您希望它成为 "automatic",您必须在 onAction
活动中添加所有内容!
祝你好运
如果您有代码,我会提供一个更好的示例,但我想我已经解决了所有问题。
我采纳了@James_D 的建议和 "refreshed" 我的 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);
}
感谢您的建议!
我有两个Stages
,例如Stage1和Stage2。 Stage1 有一个 ListView
和一个 Button
。 OnPressing 按钮出现在 Stage1 上,我打开一个对话框,即 Stage2。 Stage2 有 TextField
和一个 Button
。如果我在 TextField 中输入一个字符串并单击按钮,我将关闭之前的 Stage1。
现在,我想在单击 stage2 按钮后更新 ListView。
当我按下按钮打开对话框时,我没有关闭 Stage1。
我在 stage2 使用 showAndWait 函数
window.showAndWait();
并使用
关闭它stage.close();
以上是舞台的一部分。我还想根据 stage2 中的按钮按下刷新其他组件。
任何人都可以建议我一个方法吗?
这取决于您是使用 FXML 还是只是编码。
但这两种方式中的任何一种方法都是相同的:
您需要将两个阶段都设置为变量。然后添加一个 onAction
事件侦听器,它将触发您的第 2 阶段 stage2.showAndWait()
.
至于文本字段和列表。您需要使用简单的 arrayList.add();
添加到该列表,然后将新列表传递给您的 listView FXController.ObservableArrayList(arrayList)
然后更新或 "refresh" 该 listView 最近有点不确定,因为没有方法"refresh" 但通过设置 listView.setVisible(false);
和 listView.setVisible(true)
就成功了!!
如果您希望它成为 "automatic",您必须在 onAction
活动中添加所有内容!
祝你好运
如果您有代码,我会提供一个更好的示例,但我想我已经解决了所有问题。
我采纳了@James_D 的建议和 "refreshed" 我的 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);
}
感谢您的建议!