在view(fxml)和javafx中的控制器之间传递值

时间:2015-10-11 04:57:58

标签: javafx fxml

我的任务是在单击javafx中的3个按钮时调用单个方法,该特定方法执行的代码只是更改单击按钮的颜色。

根据场景我在fxml中创建了3个按钮,在我的控制器里面我定义了一个方法。我的任务代码就是

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

现在请您告诉我,如何获得点击的特定按钮ID。 myButton 是点击按钮的 fx:id

提前致谢。

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

fx:id永远不会传递给控制器​​。相反,它们用于在通过FXMLLoader加载fxml时将控件的实例注入控制器。

当你的fxml有一个控件

<Button fx:id="myButton">

您需要确保在控制器内创建的Button引用应具有相同的名称。如果没有,Button的实例化将失败。

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 
   }
}