Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何一次更新所有JavaFX元素?_Java_Javafx - Fatal编程技术网

如何一次更新所有JavaFX元素?

如何一次更新所有JavaFX元素?,java,javafx,Java,Javafx,我有一个简单的javaFX应用程序,其中包含一些组合框和文本区域 Combobox1具有arraylist中的所有客户端。当我通过按钮删除客户端时,单击该按钮将从列表中删除该客户端,所有其他fx元素(如Textareas和ComboBox)都应应用此更改 我的方法是为每个元素再次加载clientlist。比如说 clientTextArea.setText(MyClass.getAllclients()) 这是可以的,当我这样做2外汇元素,但它会变得超级混乱与10或100。 通知所有其他相关外汇

我有一个简单的javaFX应用程序,其中包含一些组合框和文本区域

Combobox1具有arraylist中的所有客户端。当我通过按钮删除客户端时,单击该按钮将从列表中删除该客户端,所有其他fx元素(如Textareas和ComboBox)都应应用此更改

我的方法是为每个元素再次加载clientlist。比如说

clientTextArea.setText(MyClass.getAllclients())

这是可以的,当我这样做2外汇元素,但它会变得超级混乱与10或100。 通知所有其他相关外汇元素重新加载clientarray的正确方式是什么

范例

    public class Worker {

    private String name;

    public Worker(String name){
        this.name = name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getName(){
        return name;
    }
}

公共课堂作业{
private ArrayList workerList=新建ArrayList();
公共void addWorker(Worker){
workerList.add(worker);
}
公共布尔removeWorker(工作者){
用于(工人工作:工人列表){
如果(工人等于(工作)){
工作列表。删除(工作);
返回true;
}
}
返回false;
}
}

公共类WorkerFX{
工作=新工作();
@FXML
私人按钮添加、删除;
@FXML
专用组合框workerComBobox;
@FXML
私人文本区工作区;
@FXML
私有TextField workerTextField;
公共无效addWorker(){
Worker newWorker=newWorker(workerTextField.getText());
work.addWorker(newWorker);
workerComBobox.getItems().add(newWorker);
//现在Textfield也会自动添加Worker
}
}
将列表声明为,然后向其中添加一个侦听器,其中包含对控件的所有必要更新。比如:

ObservableList<SomeClass> myList = FXCollections.observableArrayList();

myList.addListener(l -> {
    // do what you need with your controls here   
});
observeList myList=FXCollections.observearraylist();
myList.addListener(l->{
//使用此处的控件执行所需操作
});
如果您有10个或100个元素,您仍然需要明确定义它们的更新行为。这是不可避免的,但通过这样做,您不必担心调用不同变更源的更新

一些控件,例如
ComboBox
expositems属性,您可以将其绑定到列表,而不是在侦听器中更新它。无论哪种方式,您仍然需要在某个地方明确定义每个控件的更新行为。

将您的列表声明为,然后向其中添加一个侦听器,其中包含对控件的所有必要更新。比如:

ObservableList<SomeClass> myList = FXCollections.observableArrayList();

myList.addListener(l -> {
    // do what you need with your controls here   
});
observeList myList=FXCollections.observearraylist();
myList.addListener(l->{
//使用此处的控件执行所需操作
});
如果您有10个或100个元素,您仍然需要明确定义它们的更新行为。这是不可避免的,但通过这样做,您不必担心调用不同变更源的更新


一些控件,例如
ComboBox
expositems属性,您可以将其绑定到列表,而不是在侦听器中更新它。无论哪种方式,您仍然需要在某个地方明确定义每个控件的更新行为。

非常感谢。我明白这个概念,但我还有另一个问题。我的clientlist是ClientHandler类中的一个字段。如何将此列表绑定到可观察列表,从而使可观察列表的每次更改都是我的ClientHandler类中客户端列表的直接更改?使用BindDirective,我可以绑定所有TextProperty,并在更改其中一个时使其全部更改,但是否有方法将可观察列表链接到我的其他类中的列表?这有什么意义吗?@QickdmGdombu你能编辑你的问题,包括一个你想要达到的目标的例子吗?完成了,我希望现在更清楚对不起。我希望每次发生变化时,例如在worker arraylist中添加一个新的worker或删除另一个worker,textarea和combobox都应该更新,或者换句话说,只显示worker arraylist中的内容非常感谢。我明白这个概念,但我还有另一个问题。我的clientlist是ClientHandler类中的一个字段。如何将此列表绑定到可观察列表,从而使可观察列表的每次更改都是我的ClientHandler类中客户端列表的直接更改?使用BindDirective,我可以绑定所有TextProperty,并在更改其中一个时使其全部更改,但是否有方法将可观察列表链接到我的其他类中的列表?这有什么意义吗?@QickdmGdombu你能编辑你的问题,包括一个你想要达到的目标的例子吗?完成了,我希望现在更清楚对不起。我希望每次发生更改时,例如在worker arraylist中添加新的worker或删除另一个worker,textarea和combobox都应该更新,或者换句话说,只显示worker arraylist中的内容,您不应该修改for each循环中的列表(您的
removeWorker
)。在您的情况下,它之所以有效,是因为您立即从方法返回,但这通常会引发异常。您不应该修改for each循环中的列表(您的
removeWorker
)。在您的情况下,它可以工作,因为您可以立即从方法返回,但这通常会导致抛出异常。
ObservableList<SomeClass> myList = FXCollections.observableArrayList();

myList.addListener(l -> {
    // do what you need with your controls here   
});