动态创建时如何知道点击了哪个menuItem?

F.M*_*F.M 0 java javafx

这是我的观点:

public class AdminPage extends VBox {
    public AdminPage() {
        Menu menu = new Menu("Optional");
        int i;
        ArrayList<String> items = new ArrayList<>();
        items.add("Product");
        items.add("Profile");
        items.add("Home");

        for (i = 0; i < items.size(); i++) {
            menu.getItems().add(new MenuItem(items.get(i)));
        }
        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().add(menu);

        this.getChildren().addAll(menuBar);
        this.setAlignment(Pos.TOP_LEFT);
    }
}

Run Code Online (Sandbox Code Playgroud)

我想编写控制器,但问题是我如何知道点击了哪个项目。

菜单是这样的:

Optional
----------
Product
Home
Run Code Online (Sandbox Code Playgroud)

我希望如果我单击产品,则会打开另一个表单。我认为这是通过点击操作完成的。

Jam*_*s_D 6

只需在创建每个菜单项时为其创建一个处理程序:

    for (String item : items) {
        MenuItem menuItem = new MenuItem(item);
        menuItem.setOnAction(e -> {
            // do whatever you need here, e.g.
            System.out.println("You selected " + item);
        });     
        menu.getItems().add(menuItem);
    }
Run Code Online (Sandbox Code Playgroud)

  • @FM 对于关于按钮操作处理的其他问题:如果您的控制器是 FXML 控制器,请参阅 [How do I handle multiple button in javafx](/sf/ask/5443976541/ -i-handle-multiple-button-in-javafx/77771498#77771498)。如果它没有回答您的其他问题,请按要求提出一个新问题,并使用 [mcve]。 (3认同)