首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向MenuButton JavaFX添加VBox

向MenuButton JavaFX添加VBox
EN

Stack Overflow用户
提问于 2018-08-01 05:14:34
回答 1查看 367关注 0票数 -1

在将VBox作为子属性插入到MenuButton中时,我遇到了一个问题,因为我必须在赋值中这样做。到目前为止,我已经想出了这个:

代码语言:javascript
复制
 <MenuButton fx:id="mb" mnemonicParsing="false" text="" GridPane.columnIndex="1" GridPane.rowIndex="3">
        <items>
            <VBox prefHeight="200.0" prefWidth="100.0" >
                <Button text="Button" GridPane.columnIndex="0" GridPane.rowIndex="0" />
                <RadioButton text="RadioButton" GridPane.columnIndex="1" GridPane.rowIndex="0" />
                <Button text="Click Me" GridPane.columnIndex="1" GridPane.rowIndex="1" />
                <ComboBox GridPane.columnIndex="0" GridPane.rowIndex="1" />
                <Slider GridPane.columnIndex="0" GridPane.rowIndex="2" />
                <CheckBox text="CheckBox" GridPane.columnIndex="1" GridPane.rowIndex="2" />
                <TextField  prefWidth="200.0" GridPane.columnIndex="0" GridPane.rowIndex="3" />
            </VBox>
        </items>
      </MenuButton>

但我收到了以下错误:

代码语言:javascript
复制
Caused by: java.lang.IllegalArgumentException: Unable to coerce VBox@13f6e35e to class javafx.scene.control.MenuItem.

有人能澄清我的错误或帮我解决它吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 05:52:28

您正在尝试将VBox添加到MenuButton,它只接受MenuItem作为子级。

你可以通过使用CustomMenuItem来解决这个问题。CustomMenuItem允许您添加任意Node作为其graphic属性,包括VBox。

所以你可以这样做:

FXML:

代码语言:javascript
复制
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.VBox?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
      prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1">
    <MenuButton mnemonicParsing="false" text="MenuButton">
        <items>
            <CustomMenuItem mnemonicParsing="false" text="Unspecified Action">
                <graphic>
                    <VBox prefHeight="200.0" prefWidth="100.0" spacing="5.0">
                        <Button mnemonicParsing="false" text="Button"/>
                        <RadioButton mnemonicParsing="false" text="RadioButton"/>
                        <Button mnemonicParsing="false" text="Click Me"/>
                        <ComboBox prefWidth="150.0"/>
                        <Slider/>
                        <CheckBox text="Check Box"/>
                        <TextField/>
                    </VBox>
                </graphic>
            </CustomMenuItem>
        </items>
    </MenuButton>
</VBox>

Java:

代码语言:javascript
复制
    MenuButton menuButton = new MenuButton();

    VBox menuVbox = new VBox();
    menuVbox.getChildren().addAll(
            new Button("Button"),
            new RadioButton("RadioButton"),
            new Button("Click Me"),
            new ComboBox<>(),
            new Slider(),
            new CheckBox("CheckBox"),
            new TextField()
    );
    CustomMenuItem vboxMenuItem = new CustomMenuItem(menuVbox);

    menuButton.getItems().add(vboxMenuItem);

顺便说一下,每当您看到IllegalArgumentException时,您的第一站应该是相关类的JavaDocs (在本例中为MenuItem)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51622165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档