gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:47:14 25 4
gpt4 key购买 nike

我在使用列表中的值填充 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com