Как обновить все элементы JavaFX одновременно? - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть простое приложение javaFX с некоторыми Combobox и Textareas.

У Combobox1 есть все клиенты из массива.Когда я удаляю клиента с помощью нажатия кнопки, он удаляет этого клиента из списка, и все другие элементы fx (такие как Textareas и comboboxes) должны применить это изменение.

Способ, который я делаю, - это снова загрузить список клиентов для каждого элемента.Например,

clientTextArea.setText (MyClass.getAllclients ());

Это нормально, когда я делаю это для 2-х элементов fx, но с 10 или 100 это будет очень беспорядочно.правильный способ сообщить всем другим связанным элементам FX перезагрузить клиентский массив?

Пример

    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
    }

}

1 Ответ

0 голосов
/ 02 декабря 2018

Объявите ваш список как ObservableList, затем добавьте в него прослушиватель, который содержит все необходимые обновления для ваших элементов управления.Что-то вроде:

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

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

Если у вас есть 10 или 100 элементов, вам все равно необходимо явно определить их поведение при обновлении.Это неизбежно, но при этом вам не нужно беспокоиться о вызовах обновлений для разных источников изменений.

Некоторые элементы управления, такие как ComboBox, выставляют свойство items, которое вы можете привязать к своему списку вместо обновления в слушателе. Вот руководство по привязке свойства JavaFX .В любом случае вам все равно нужно явно определить поведение обновления для каждого элемента управления где-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...