【问题标题】:Combo box setValue JavaFX组合框 setValue JavaFX
【发布时间】:2015-03-06 13:05:28
【问题描述】:

我有一个组合框,我在节点初始化时设置了这个组合框的默认值。但是,一旦从数据库中检索到一些数据,我想将此默认值更新为其他值。

initialise() {
businessDateComboBox.setItems(config.retrievedPositionsData().getDistinctBusinssDate()); 
businessDateComboBox.setValue(config.retrievedPositionsData().getCurrentBusinessDate().toString());
}

setItems 是一个 ObservableList,setValue 是一个 ObservableList,但我将它转换为字符串。

现在我使用一个单独的线程从数据库中检索项目。

public void readPositionsFromDataBase() throws Exception {
    Task<Integer> task = new Task<Integer>() {
        @Override protected Integer call() throws Exception {       
            config.positionViewPersister().readDataFromDataBase(null,null);
            return 0;
        }
    };
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
config.retrievedPositionsData().setCurrentBusinessDate("56")    
}

完成后,我想使用为默认组合框值检索到的最新值更新用户界面。我通过重新加载 FXML 和由初始化方法组成的 FXML 的相应控制器来做到这一点 - 目前初始化方法再次运行,但用户界面没有更新为最新值。有谁知道为什么?

用户界面组合框中的默认值现在应该是 56,因为我设置了它。当我打印 businessDateComboBox.getValue() 它给出 56 它​​只是没有更新用户界面。

是否有任何等效的挥杆重绘或其他东西?

【问题讨论】:

    标签: java combobox javafx fxml


    【解决方案1】:

    businessDateComboBox.setValue 用于可编辑ComboBox 的编辑组件。我猜你的不是,所以正确的方法应该是通过SelectionModel

    businessDateComboBox.getSelectionModel().select(...)
    

    【讨论】:

    • 我在 getSelectionModel 下没有 setSelectedItem 选项。但是我使用了 selectLast 但这并没有完全更新 UI?
    • 对不起,我的意思是select()。编辑了答案。如果两者都不起作用,则其他东西在您的代码中不起作用。例如:通过 FXML 重新加载整个 GUI 似乎是不必要的..
    • setValue(...)select(...) 仅在您传入的值是列表的元素时才有效(无论如何,这应该是有意义的)。您提供的代码看起来不太可能;如果列表是Strings 的列表,则toString() 是多余的。您提供的ComboBoxObservableList 的类型是什么?
    • James_D:它是一个字符串列表,但 setValue 只接受一个字符串而不是一个列表。因此谈话。也许我会传入与列表中的值相似的值?值必须匹配还是类型必须匹配?
    • 如果您调用select(xyz),对象xyz 必须与ComboBox 的后备列表中的对象完全相同(如equals())。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    相关资源
    最近更新 更多