如何获取在MenuButton中单击的MenuItem的名称

时间:2016-06-03 08:00:38

标签: java javafx onclick menuitem

我试图获取MenuItem的名称,然后将Label文本设置为MenuButton中单击的MenuItem的名称。我怎样才能做到这一点? MenuItems从数据库中的字符串中获取id。

变量:

@FXML
private MenuButton projektAuswahl;

MenuItem item;

创建新的MenuItem:

ResultSet rs = stmt.executeQuery(sqlQuery);

while (rs.next()) {
    item = new MenuItem(rs.getString(1));
    item.setId(rs.getString(1));
    projektAuswahl.getItems().add(item);
}

设置标签文字:

private void setProjectLabel() {
        //projectnameLabel.setText(item.getText()); //not working..
    }

如何识别单击哪个MenuItem?

2 个答案:

答案 0 :(得分:1)

您还需要为onAction event注册处理程序。对于每个MenuItem保存每个文本的数据,这可能是一个新的,或者您可以访问event source以获取对MenuItem的引用:

static MenuItem createMenuItem(String text, EventHandler<ActionEvent> handler) {
    MenuItem result = new MenuItem(text);
    result.setOnAction(handler);
    return result;
}

private Label projectnameLabel;

private void setProjectLabel(ActionEvent event) {
    MenuItem source = (MenuItem) event.getSource();
    projectnameLabel.setText(source.getText());
}

@Override
public void start(Stage primaryStage) {
    EventHandler<ActionEvent> handler = this::setProjectLabel;

    MenuButton btn = new MenuButton("menu");
    btn.getItems().addAll(createMenuItem("a", handler),
            createMenuItem("b", handler),
            createMenuItem("c", handler));

    projectnameLabel = new Label();

    VBox root = new VBox(10, btn, projectnameLabel);

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);
    primaryStage.show();
}

答案 1 :(得分:0)

您可以直接在以下代码中添加动作侦听器:

    menuItem.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent t) {
            setProjectLabel(); // in your case
        }
    });

或者我建议你在你的fxml中添加一个控制器,然后替换你在其中显示的所有代码,并将setProjectLabel()与SceneBuilder中的menuitem绑定在一​​起:

enter image description here