我正在尝试设置三个不同按钮使用的方法。我想根据按下哪个视图加载三个不同视图中的一个。为此,我想过将按钮本身作为参数传递。但我无法,因为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();
一种更简单的方法就是为按钮使用不同的处理程序。
您可以像这样使用事件对象的源:
button.setOnAction(e -> {if (e.getSource() == button) System.out.println("button was pressed.");});
在上面的例子中,你只需要用pressed
交换e.getSource()
。
为每个按钮使用不同的处理程序。看起来这很简单:
@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");
// ...
}
我认为使用单独的处理程序更易于维护,因为冗长的价格很低。