我正在使用javafx编写一个程序,并且需要一个下拉框,我可以在其中选择多个选项,并在按下"提交"按钮后将一个函数应用于每个选项,但是在单击"提交"按钮后,我在区分选择了哪些选项时遇到了麻烦。
它不允许我将 CheckMenuItem 类中的任何方法(例如 .isSelected() )应用于可观察列表,因为该列表似乎填充了 MenuItems,而不是 CheckMenuItems,但是当我创建 MenuButton 时,我使用了 CheckMenuItems 的可观察列表。
有什么帮助吗?提前感谢!
public final ObservableList<MenuItem> getItems()
MenuButton getItems 返回 ObservableList of MenuItem ,你必须显式转换为 CheckMenuItem,然后调用与 CheckMenuItem 相关的方法。
示例代码 :
public class CheckMenuItemTest extends Application {
private ObservableList<CheckMenuItem> list = FXCollections.observableArrayList();
@Override
public void start(Stage stage) throws Exception {
HBox root = new HBox();
final MenuButton menuButton = new MenuButton();
CheckMenuItem item1 = new CheckMenuItem("item1");
CheckMenuItem item2 = new CheckMenuItem("item2");
CheckMenuItem item3 = new CheckMenuItem("item3");
CheckMenuItem item4 = new CheckMenuItem("item4");
list.addAll(item1,item2,item3,item4);
menuButton.getItems().addAll(list);
Button button = new Button("Submit");
root.getChildren().addAll(menuButton,button);
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
for(MenuItem item : menuButton.getItems()) {
CheckMenuItem checkMenuItem = (CheckMenuItem) item;
if(checkMenuItem.isSelected()) {
System.out.println("Selected item :" + checkMenuItem.getText());
}
}
}
});
Scene scene = new Scene(root,300,300);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}