确定按下按钮的fx:id

时间:2017-12-21 09:36:03

标签: java button javafx

我正在尝试设置三个不同按钮使用的方法。我想根据按下哪个视图加载三个不同视图中的一个。为此,我想过将按钮本身作为参数传递。但我无法,因为javaFX没有用新参数识别方法。

如何获取呼叫者按钮的fx:id,以便我可以区分每个呼叫者按钮?这是我到目前为止所得到的。我只需要初始化pressed变量,这样就可以完成它。

if (pressed == edgeModify){
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/edgeView.fxml"));
} else if (pressed == sectionModify){
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/sectionView.fxml"));
} else {
    loader = new FXMLLoader(getClass().getResource("/digitalia/view/LayerView.fxml"));
}

4 个答案:

答案 0 :(得分:2)

您可以获得按钮的ID,如下所示:

Button btn = (Button) event.getSource();
String id = btn.getId();

更简单的方法就是为按钮使用不同的处理程序。

答案 1 :(得分:1)

您可以像这样使用事件对象的来源:

button.setOnAction(e -> {if (e.getSource() == button) System.out.println("button was pressed.");});

在上面的示例中,您只需与pressed交换e.getSource()

答案 2 :(得分:1)

为每个按钮使用不同的处理程序。看起来这很简单:

@FXML
private void loadEdgeView(ActionEvent event) {
    load("edgeView");
}

@FXML
private void loadSectionView(ActionEvent event) {
    load("sectionView");
}

@FXML
private void loadLayerView(ActionEvent event) {
    load("layerView");
}

private void load(String view) {
    FXMLLoader loader = new FXMLLoader("/digitalia/view/" + view + ".fxml");
    // ...
}

如果确实希望使用单一方法执行此操作,则可以使用按钮的userData;即:

<Button text="Load Edge View" onAction="#loadView" userData="edgeView" />
<Button text="Load Section View" onAction="#loadView" userData="sectionView" />
<Button text="Load Layer View" onAction="#loadView" userData="layerView" />

然后在控制器中:

@FXML
private void loadView(ActionEvent event) {
    Node node = (Node) event.getSource();
    String view = (String) node.getUserData();
    FXMLLoader loader = new FXMLLoader("/digitalia/view/" + view + ".fxml");
    // ...
}

我认为使用单独的处理程序更易于维护,但价格低廉。

答案 3 :(得分:-2)

@FXML void handleButtonAction(ActionEvent event) {
        Expression e = new Expression("");

        String eventString = event.toString();
        System.out.println(eventString);
        String[] cutAtId = eventString.split("id=");
        cutAtId = cutAtId[1].split(", ");
        eventString = cutAtId[0];
        System.out.println("eventString ===>>>" + eventString + "<<<<====");
}
相关问题