如何一次更新所有JavaFX元素?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何一次更新所有JavaFX元素?相关的知识,希望对你有一定的参考价值。
我有一个简单的javaFX应用程序,包含一些Comboboxes和Textareas。
Combobox1拥有来自arraylist的所有客户。当我通过buttonclick删除客户端时,它会从列表中删除此客户端,所有其他fx元素(如Textareas和comboboxes)应该应用此更改。
我的方法是再次为每个元素加载客户端列表。例如
clientTextArea.setText(MyClass.getAllclients());
当我为2个fx元素执行此操作时,这是可以的,但它会变得超级混乱10或100.通知所有其他相关fx元素重新加载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;
}
}
public class Work {
private ArrayList<Worker> workerList = new ArrayList<>();
public void addWorker(Worker worker){
workerList.add(worker);
}
public boolean removeWorker(Worker worker) {
for(Worker work: workerList) {
if(worker.equals(work)){
workerList.remove(work);
return true;
}
}
return false;
}
}
public class WorkerFX {
Work work = new Work();
@FXML
private Button add, remove;
@FXML
private ComboBox<Worker> workerComBobox;
@FXML
private TextArea workerTextArea;
@FXML
private TextField workerTextField;
public void addWorker(){
Worker newWorker = new Worker(workerTextField.getText());
work.addWorker(newWorker);
workerComBobox.getItems().add(newWorker);
//now the Textfield schould automaticly also add the Worker too
}
}
答案
将您的列表声明为ObservableList
然后添加一个监听器,其中包含控件的所有必要更新。就像是:
ObservableList<SomeClass> myList = FXCollections.observableArrayList();
myList.addListener(l -> {
// do what you need with your controls here
});
如果您有10个或100个元素,则仍需要明确定义其更新行为。这是不可避免的,但通过这样做,您无需担心在不同的更改源上调用更新。
某些控件(如ComboBox
)会显示items属性,您可以将其绑定到列表而不是在侦听器中更新它。 Here's a guide to JavaFX property binding。无论哪种方式,您仍然需要在某处明确定义每个控件的更新行为。
以上是关于如何一次更新所有JavaFX元素?的主要内容,如果未能解决你的问题,请参考以下文章