簡體   English   中英

確定按下按鈕的 fx:id

[英]Determine the fx:id of a pressed button

我正在嘗試設置由三個不同按鈕使用的方法。 我想根據按下哪個視圖加載三個不同的視圖之一。 為此,我考慮將按鈕本身作為參數傳遞。 但是我無法,因為 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"));
}

您可以獲取按鈕的 id,如下所示:

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

一種更簡單的方法是為按鈕使用不同的處理程序。

為每個按鈕使用不同的處理程序。 看起來這很簡單:

@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 IE:

<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");
    // ...
}

我認為使用單獨的處理程序更易於維護,而且冗長的代價很小。

您可以像這樣使用事件對象的源:

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

在你上面的例子中,你只需要與e.getSource()交換pressed

@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 + "<<<<====");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM