MenuButton在Javafx中不显示项目

曼苏尔

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

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

然后添加一个MenuButton:

<MenuButton fx:id="menuButton" layoutX="264.1875" layoutY="146.5" mnemonicParsing="false" text="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<CheckMenuItem> 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中显示任何CheckMenuItems。

如何在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文档中全部定义它们,而不用在代码中创建它们。

注意:这是一个重复的问题,之前曾被问过(不是确切的问题,而是实质问题),但是我的Google技能无法挖掘出某些重复的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章