java - MenuButton 在 Javafx 中不显示项目

标签 java javafx javafx-2 javafx-8 fxml

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

在 FXML 中,我将 Controller 设置为 FooController (fx:controller="FooController")

我添加了一个菜单按钮:

<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 将在其实例化的组件的层次结构中创建新项目,并将这些新项目的引用注入(inject)到您的 Controller 中。如果您随后将这些引用设置为新值,则新值将永远不会包含在显示的组件层次结构中,除非您专门将它们添加到那里,这首先违背了使用 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 文档中全部定义它们,而不是在代码中创建它们。

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

关于java - MenuButton 在 Javafx 中不显示项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23960625/

相关文章:

java - 错误消息指出 java 的构造函数放错位置

java - JSP java servlet 在 web.xml 中不断出现错误

java - 如何在系统应用程序的棉花糖中无需用户交互即可授予权限?

java - 错误 : JavaFX runtime components are missing - JavaFX 11 and OpenJDK 11 and Eclipse IDE

java - 对 -fx-alignment : LEFT saying no enum constant javafx. geometry.Pos.LEFT 发出警告

java - 带有JavaFX的Java 11使用Gradle构建JAR

java - 在 TextField 中选择一个词

java - 为什么dimen资源不一致以及如何获取正确的值?

java - 创建多个文件的 Netbeans 模板

java - 如何从包中引用文件 - JavaFXPorts