当它被激活时,我可以在 Action Event 方法中获取 javafxml object 的 ID 吗?
Can I get the id of the javafxml object in an Action Event method, when it gets activated?
我正在尝试编写一个小型角色扮演游戏,我决定将基础知识放入一个 fxml 文档(带有项目的菜单栏)。
所以现在我打算在你点击菜单项(角色、物品栏和装备)时打开一个新的 window,这样我就可以显示额外的东西 window。所以我想将每个菜单的标题设置为等同于 MenuItem 上显示的文本是有道理的。当然,我可以为每个菜单项创建一个额外的方法,但我正在寻找一种可能性,在那里我可以获得触发事件的菜单项的 id,因此我可以使用他们的 getText 方法来获取标签.
有人可以帮我吗?
我尝试使用 "this" 访问 object 并且还考虑过使用枚举将 ID 连接到枚举 MenuName 的 Objects,所以我只需要放一个在我的方法中切换,从而创建菜单,但这也没有成功,因为在那里我无法检查哪个 id 被触发了。所以对于我程序的那部分,它没有帮助。
这是我控制器中的代码 class
public class Controller {
@FXML
private void menuIsClickedDefault(ActionEvent event) throws Exception {
Stage secondStage = new Stage();
Parent a = FXMLLoader.load(getClass().getResource("menus.fxml"));
secondStage.setTitle(HERES_MY_PROBLEM);
secondStage.setScene(new Scene(a, 646, 400));
secondStage.initModality(Modality.APPLICATION_MODAL);
secondStage.show();
}
}
这些是我的 fxml object:
<MenuItem fx:id="stats" mnemonicParsing="false" text="Statistics" />
<MenuItem fx:id="inv" mnemonicParsing="false" text="Inventory" />
<MenuItem fx:id="equip" mnemonicParsing="false" text="Equipment" />
我还没有在 object 中集成该方法,因为如果不解决问题就没有意义,而且我知道由于设置方法相似,其余代码都可以正常工作.
您可以调用event.getSource()
来检索触发事件的节点。不过,您需要将返回的对象转换为正确的类型。
private void menuIsClickedDefault(ActionEvent event) throws Exception {
Stage secondStage = new Stage();
Parent a = FXMLLoader.load(getClass().getResource("menus.fxml"));
// Get the source of this event and cast it to a MenuItem; then you can
// retrieve its text property
secondStage.setTitle(((MenuItem) event.getSource()).getText());
secondStage.setScene(new Scene(a, 646, 400));
secondStage.initModality(Modality.APPLICATION_MODAL);
secondStage.show();
}
我正在尝试编写一个小型角色扮演游戏,我决定将基础知识放入一个 fxml 文档(带有项目的菜单栏)。 所以现在我打算在你点击菜单项(角色、物品栏和装备)时打开一个新的 window,这样我就可以显示额外的东西 window。所以我想将每个菜单的标题设置为等同于 MenuItem 上显示的文本是有道理的。当然,我可以为每个菜单项创建一个额外的方法,但我正在寻找一种可能性,在那里我可以获得触发事件的菜单项的 id,因此我可以使用他们的 getText 方法来获取标签. 有人可以帮我吗?
我尝试使用 "this" 访问 object 并且还考虑过使用枚举将 ID 连接到枚举 MenuName 的 Objects,所以我只需要放一个在我的方法中切换,从而创建菜单,但这也没有成功,因为在那里我无法检查哪个 id 被触发了。所以对于我程序的那部分,它没有帮助。
这是我控制器中的代码 class
public class Controller {
@FXML
private void menuIsClickedDefault(ActionEvent event) throws Exception {
Stage secondStage = new Stage();
Parent a = FXMLLoader.load(getClass().getResource("menus.fxml"));
secondStage.setTitle(HERES_MY_PROBLEM);
secondStage.setScene(new Scene(a, 646, 400));
secondStage.initModality(Modality.APPLICATION_MODAL);
secondStage.show();
}
}
这些是我的 fxml object:
<MenuItem fx:id="stats" mnemonicParsing="false" text="Statistics" />
<MenuItem fx:id="inv" mnemonicParsing="false" text="Inventory" />
<MenuItem fx:id="equip" mnemonicParsing="false" text="Equipment" />
我还没有在 object 中集成该方法,因为如果不解决问题就没有意义,而且我知道由于设置方法相似,其余代码都可以正常工作.
您可以调用event.getSource()
来检索触发事件的节点。不过,您需要将返回的对象转换为正确的类型。
private void menuIsClickedDefault(ActionEvent event) throws Exception {
Stage secondStage = new Stage();
Parent a = FXMLLoader.load(getClass().getResource("menus.fxml"));
// Get the source of this event and cast it to a MenuItem; then you can
// retrieve its text property
secondStage.setTitle(((MenuItem) event.getSource()).getText());
secondStage.setScene(new Scene(a, 646, 400));
secondStage.initModality(Modality.APPLICATION_MODAL);
secondStage.show();
}