2015-07-09 4 views
2

Я изучаю API JavaFX для приложения, над которым я работаю в данный момент, и пытаюсь использовать CheckComboBox из ControlsFX.Обновить проблему на ControlsFX CheckComboBox display

Я сделал тест, чтобы решить проблему обновления элементов, когда я добавляю элементы в ObservableList, который заполняет CheckComboBox.

import org.controlsfx.control.CheckComboBox; 

import javafx.application.Application; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.ComboBox; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 

public class Testin extends Application { 
    private Stage main; 
    private FlowPane root; 
    private ObservableList<String> l; 

    public Testin(){ 
     root = new FlowPane(); 
     l = FXCollections.observableArrayList(); 
     l.add("bla"); 
     l.add("shablagoo"); 
     l.add("tirelipimpon"); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     main = primaryStage; 
     CheckComboBox<String> test = new CheckComboBox<>(); 
     test.getItems().addAll(l); 
     Button btn = new Button("test"); 
     btn.setOnAction(new EventHandler<ActionEvent>(){ 
      @Override 
      public void handle(ActionEvent event){ 
       l.add("ok"); 
       System.out.println("ok"); 
      } 
     }); 
     root.getChildren().add(test); 
     root.getChildren().add(btn); 
     Scene scene = new Scene(root); 
     main.setScene(scene); 
     main.show(); 

    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

Как классический ComboBox, когда элемент добавляется в список, он будет обновлять себя автоматически, но это не так. Должен ли я создать ListChangeListener, который в каждом отчете об изменении этого отображается в отображаемом списке ComboBox, или мой код неправильный?

Дополнительная информация: Я также пробую этот тест с ComboBox, заменяя CheckComboBox, и это хорошо работает.

+0

Если вы изменили 'CheckComboBox' на' ComboBox', он все равно не работает. –

ответ

1
test.getItems().addAll(someList); 

copies all the elements of someList to the combo box's items list. Очевидно, что последующие изменения в someList не окажут никакого влияния на поле со списком.

Вы либо хотите заменить

test.getItems().addAll(l); 

с

test.setItems(l); 

или вы хотите заменить

l.add("ok"); 

с

test.getItems().add("ok"); 
+0

Спасибо за ваш ответ, но есть проблема с CheckComboBox. У него нет метода .setItems() вместо базового ComboBox. На самом деле, в моем тесте кнопка добавляет и обновляет исходный список, но поскольку список элементов списков исключений не указывает на это, он не может быть обновлен, правильно? –

+0

Итак, используйте второе решение: замените 'l.add (« ok »);' с 'test.getItems(). Add (" ok ");'. –