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

时间:2014-01-02 17:43:17

标签: java javafx

我正在用javafx编写一个程序,需要有一个下拉框,我可以选择多个选项并在按下“提交”按钮后应用于所选的每个选项,但是我遇到了麻烦区分单击“提交”按钮后选择了哪些选项。

它不允许我将CheckMenuItem类中的任何方法(如.isSelected())应用于observableList,因为List似乎用MenuItems填充,而不是CheckMenuItems,但是当我创建MenuButton时,我使用了一个Observable的CheckMenuItems。

有任何帮助吗?提前致谢!

1 个答案:

答案 0 :(得分:2)

public final ObservableList<MenuItem> getItems()

MenuButton getItems返回MenuItem的ObservableList,你必须显式地转换为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);
    }
}