在将VBox作为子属性插入到MenuButton中时,我遇到了一个问题,因为我必须在赋值中这样做。到目前为止,我已经想出了这个:
<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>
但我收到了以下错误:
Caused by: java.lang.IllegalArgumentException: Unable to coerce VBox@13f6e35e to class javafx.scene.control.MenuItem.
有人能澄清我的错误或帮我解决它吗?谢谢你的帮助。
发布于 2018-08-01 05:52:28
您正在尝试将VBox
添加到MenuButton
,它只接受MenuItem
作为子级。
你可以通过使用CustomMenuItem
来解决这个问题。CustomMenuItem
允许您添加任意Node
作为其graphic
属性,包括VBox。
所以你可以这样做:
FXML:
<?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:
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
)。
https://stackoverflow.com/questions/51622165
复制相似问题