【问题标题】:Refresh issue on ControlsFX CheckComboBox displayControlsFX CheckComboBox 显示上的刷新问题
【发布时间】:2015-07-09 15:37:20
【问题描述】:

我正在为我目前正在开发的应用程序学习 API JavaFX,我正在尝试使用 ControlsFX 的 CheckComboBox

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

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 并且运行良好。

【问题讨论】:

  • 如果把CheckComboBox改成ComboBox还是不行。

标签: java combobox javafx controlsfx


【解决方案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");

【讨论】:

  • 感谢您的回答,但 CheckComboBox 有问题。它没有方法 .setItems() 而不是基本的 ComboBox。事实上,在我的测试中,按钮添加并更新了初始列表,但是由于组合框项目列表没有指向这个,所以无法更新,对吧?
  • 所以使用第二种解决方案:将l.add("ok");替换为test.getItems().add("ok");
猜你喜欢
  • 2016-12-16
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 2020-04-18
  • 1970-01-01
  • 2014-05-22
相关资源
最近更新 更多