我正在为当前正在使用的应用程序学习API JavaFX,并且尝试使用ControlsFX的CheckComboBox

为了解决有关在显示ObservableListCheckComboBox中添加项目时项目刷新显示的问题,我进行了测试。

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代替进行此测试,并且运行良好。

最佳答案

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");

08-28 22:26