MenuButton不显示Javafx中的项目

我有一个Foo类,只需加载FXML并创建场景。

在FXML中,我将控制器设置为FooController( fx:controller="FooController"

我添加一个MenuButton:

  

我尝试在FooController中设置menuButton:

 public class FooController implements Initializable{ @FXML final MenuButton menuButton = new MenuButton("Modalities"); @Override public void initialize(URL arg0, ResourceBundle arg1) { final ObservableList listFilter = FXCollections.observableArrayList(); final MenuButton menuButton = new MenuButton("Modalities"); CheckMenuItem item1 = new CheckMenuItem("T1"); CheckMenuItem item2 = new CheckMenuItem("T1C"); CheckMenuItem item3 = new CheckMenuItem("T2"); listFilter.addAll(item, item2, item3); menuButton.getItems().addAll(listFilter); menuButton.setId("menuButton"); } } 

但是,尽管为MenuButton设置了所有内容,但它不会在GUI中显示任何CheckMenuItem。

如何在FXML中定义的menuButton中加载这些项?

切勿@FXML初始化值设置为新值。

在您发布的代码中,当您不应该执行此操作时,您将执行此操作两次

FXMLLoader将在它实例化的组件的层次结构中创建新项目,并将对这些新项目的引用注入到控制器中。 如果然后将这些引用设置为新值,则新值将永远不会包含在显示的组件层次结构中,除非您在那里专门添加它们,这首先忽略了使用FXML的目的,因为它忽略了FXML中定义的内容文件。

你应该拥有的是:

 public class FooController { @FXML MenuButton menuButton; public void initialize() { menuButton.getItems().addAll( FXCollections.observableArrayList( new CheckMenuItem("T1"), new CheckMenuItem("T1C"), new CheckMenuItem("T2") ) ); } } 

另请注意,如果上面代码中的CheckMenuItems是静态而不是动态列表,那么您可以在FXML文档中定义它们,而不是在代码中创建它们。

注意:这是一个重复的问题,之前已被问过(不是确切的问题,但它的实质),但我的谷歌技能无法挖出一些重复。