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