【发布时间】:2018-12-02 15:08:53
【问题描述】:
我有一个带有一些组合框和文本区域的简单 javaFX 应用程序。
Combobox1 具有来自 arraylist 的所有客户端。当我通过 buttonclick 删除客户端时,它会从列表中删除该客户端,并且所有其他 fx 元素(如 Textareas 和组合框)都应应用此更改。
我的做法是为每个元素再次加载客户端列表。例如
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
}
}
【问题讨论】:
-
您不应该在 for-each 循环中修改列表本身(您的
removeWorker)。在您的情况下,它可以工作,因为您立即从该方法返回,但这通常会引发异常。