Могу ли я получить идентификатор объекта javafxml в методе Action Event, когда он активируется? - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь кодировать небольшой RPG, и я решил поместить основы в документ fxml (MenuBar с их элементами). Поэтому теперь я планирую открыть новое окно, когда вы щелкнете по пунктам меню (Персонаж, Инвентарь и снаряжение), чтобы я мог отобразить вещи, в которых есть дополнительное окно. Поэтому имеет смысл установить заголовок каждого меню, эквивалентный тексту, отображаемому в MenuItem. Конечно, я мог бы просто создать дополнительный метод для каждого элемента меню, но я ищу возможность, где я могу получить идентификатор элемента меню, который вызвал событие, поэтому я могу использовать их метод getText для получения тега , Кто-нибудь может мне помочь?

Я попытался получить доступ к объекту с помощью «this», а также подумал об использовании enum для подключения идентификаторов к объектам enum MenuName, поэтому мне просто нужно включить переключатель в моем методе, создавая таким образом меню, но это также не сработало, потому что там я не могу проверить, какой из ID был уволен. Так что для этой части моей программы это не поможет.

Вот код в моем классе контроллера

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:

<MenuItem fx:id="stats" mnemonicParsing="false" text="Statistics" />
<MenuItem fx:id="inv" mnemonicParsing="false" text="Inventory" />
<MenuItem fx:id="equip" mnemonicParsing="false" text="Equipment" />

Я еще не интегрировал метод в объекты, потому что он не имеет смысла без решения проблемы, и я знаю, что остальная часть кода работает из-за аналогичного метода для настроек.

1 Ответ

5 голосов
/ 23 мая 2019

Вы можете позвонить 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();
}
...