java - 使用 List<String> 填充 Java FX 组合框

标签 java javafx

我在使用列表中的值填充 JavaFX 中的组合框时遇到问题。我对 UI 开发非常陌生,所以我在网上找到的任何东西都对我没有真正的帮助。现在我有一个Class myClass使用方法getNames()返回 List<String> 。现在我需要可以从下拉菜单中选择该方法的名称。我在我的 Controller 中尝试了类似的操作:

ObservableList<String> options = FXCollections.observableArrayList(myClass.getNames());

@FXML
final ComboBox comboBox = new ComboBox(options);

但是当我启动程序时,我的组合框仍然是空的。当然我也放了fx:id = "comboBox"在 .fxml 文件中。 我是否错过了什么,或者我应该用完全不同的方法来做到这一点?

最佳答案

您的ComboBox 带有@FXML 注释,这意味着FXMLLoader 将注入(inject)一个实例。该注入(inject)的实例将替换您创建的实例。您应该从 initialize 方法填充 ComboBox(请参阅 Introduction to FXML)。

import javafx.scene.control.ComboBox;

public class Controller {

    @FXML 
    private ComboBox<String> comboBox;

    @FXML
    private void initialize() {
        // Must declare myClass instance somewhere
        comboBox.getItems().setAll(myClass.getNames());
    }

}

请注意,我还创建了通用的ComboBox(并且是非final)。 Avoid using raw types .

<小时/>

虽然上述内容是正确的,但您对 final 的使用使事情变得复杂。从一些快速测试来看,FXMLLoader 似乎不会尝试注入(inject) final 字段(这是有道理的)。但是,您创建的 ComboBox 与添加到场景图中的 ComboBox 不同。换句话说,FXMLLoader 仍然创建自己的 ComboBox,用于构建 GUI。

关于java - 使用 List<String> 填充 Java FX 组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53822436/

相关文章:

java - 在默认浏览器中打开 URL

java - 在 Derby 和 Hsqldb 中转义表名和字段名的问题

java - 不确定使用 BufferedReader 根据 boolean 值检查 .txt 文件中的信息

Java ChoiceDialog 更改默认按钮顺序

java - 从头开始创建模式对话框

java - 在 JAVAFX TableView 中设置值 - 对象与另一个对象

java - Spring Boot使用bean内部配置

java - 正则表达式从文本java验证意大利名字

java 7套接字监听异常

JavaFX Script 和 Visage,等效?