从填充了 CheckMenuItems (JavaFX) 的 MenuButton 访问信息



我正在使用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);
    }
}

最新更新