2015-10-11 183 views
0

我的任務是在javafx中單擊3個按鈕時調用單個方法,該特定方法執行簡單更改單擊按鈕顏色的代碼。在javafx中傳遞視圖(fxml)和控制器之間的值

根據場景我已經在fxml中創建了3個按鈕,並且在我的控制器中我定義了一個方法。我的任務代碼是簡單的

myButton.setStyle("-fx-background-color:green"); 

現在你可以請告訴我,我怎麼能得到特定的按鈕id被點擊。 Here myButtonfx:id被點擊的按鈕。

在此先感謝。

+0

可以定義一個'的OnAction = 「#方法名」'爲每個按鈕如圖[本示例](https://docs.oracle.com/javase/8/javafx/fxml-tutorial/fxml_tutorial_intermediate .htm#CIAEDJBA) – ItachiUchiha

+0

that'a ok,但是如何將該按鈕的fx:id傳遞給控制器 – tinku

回答

1

你可以做到以下幾點:

@FXML 
public void handleActionEvent(ActionEvent event) { 
    Object source = event.getSource(); 
    if (source.equals(buttonA)) { 
     buttonA.setStyle("-fx-background-color:red"); 
    } else if (source.equals(buttonB)) { 
     buttonB.setStyle("-fx-background-color:green"); 
    } else if (source.equals(buttonC)) { 
     buttonC.setStyle("-fx-background-color:blue"); 
    } 
} 

有你的控制器內的三個按鈕:

@FXML 
private Button buttonA; 

@FXML 
private Button buttonB; 

@FXML 
private Button buttonC; 

每個按鈕需要FXML內一致的idonAction="#handleActionEvent"

0

fx:id's永遠不會傳遞給控制器​​。相反,當你通過FXMLLoader加載fxml時,它們被用來將控件的實例注入控制器。

當你的FXML有一個控制

<Button fx:id="myButton"> 

您需要確保您在控制器內創建按鈕參考應具有相同的名稱。否則,按鈕的實例化將失敗。

public class MyController { 

    @FXML 
    private Button myButton; // name should be same as the fx:id 
    ... 
} 

同樣,如果你想在按鈕添加一個動作,你可以將其添加在FXML,

<Button fx:id="myButton" onAction="#myAction"> 

,這將尋求與控制器相同名稱的方法。無論何時您點擊按鈕,它都會調用控制器中定義的方法。

public class MyController { 

    @FXML 
    private Button myButton; // name should be same as the fx:id 
    ... 

    public void myAction(ActionEvent event) { 
     // Do Something 
    } 
} 
相關問題