JavaFX:将多个参数传递给事件处理程序

时间:2018-11-04 21:35:50

标签: java javafx fxml

将多个参数传递给控制器​​类的EventHandler的最合适方法是什么?

我正在为自己开发的应用程序开发日历模式。我的要求是将月份和年份分别传递给控制器​​。这是我目前的做法。

FXML:

<Button onAction="#handleClicks"  text="DECEMBER" textFill="WHITE" userData="2018/12">

控制器:

public class CalendarController implements Initializable {

public void handleMonths(ActionEvent ev){
    Node node = (Node) ev.getSource();
    String full_mnth = node.getUserData().toString();
    String[] date = full_mnth.split("/");
    System.out.println("Year : "+date[0] +" Month : "+date[1]);
}
}

但是如果我可以将数组用作UserData或可以通过将更容易 多个参数。有人可以建议实现此目标的最合适方法。

1 个答案:

答案 0 :(得分:4)

使用Node.properties地图。这使您可以使用字符串作为键来存储对象。只需确保不要使用与父项的static属性类似的键(例如,此处要参考AnchorPane.leftAnchor),因为这些属性也存储在此映射中:

fxml

<Button onAction="#handleClicks" text="DECEMBER" textFill="WHITE">
    <properties>
        <year>
            <Integer fx:value="2018"/>
        </year>
        <month>
            <Integer fx:value="12"/>
        </month>
    </properties>
</Button>

控制器

@FXML
private void handleClicks(ActionEvent event) {
    Map<Object, Object> properties = ((Node) event.getSource()).getProperties();
    System.out.println("year: "+properties.get("year"));
    System.out.println("month: "+properties.get("month"));
}