JavaFX: как вызвать метод из контроллера в Main

Я хочу вызвать метод getRow() внутри контроллера из основного метода класса Main в JavaFX. Я действительно понятия не имею, как использовать JavaFX, поэтому я даже не знаю, следует ли это делать с контроллером.

public class Controller {

    public Button button00 = new Button();

    public int getRow(){
        return GridPane.getRowIndex(button00);
    }
}

Я делаю шахматы в JavaFX (GridPane с 64 кнопками), но я уже сделал шахматы как обычный проект Java, и поэтому я хочу как-то заставить его работать с JavaFX. Но моему исходному коду нужна позиция выбранной игровой фигуры (которая была введена с консоли), поэтому я попытался получить позицию выбранной кнопки. Однако мне нужна эта позиция в моем основном методе, и я не знаю, как ее получить.


person TheWarInMyMind    schedule 05.04.2018    source источник
comment
Нет, вы не должны вызывать его в своем основном методе, вы должны вызывать его в событии в своем контроллере. Можете ли вы описать, что вы пытаетесь сделать   -  person SteelToe    schedule 05.04.2018
comment
1. Вы не можете вызвать его из метода main(); там просто нет возможности получить ссылку на какой-либо экземпляр контроллера. 2. В этом нет необходимости: на самом деле вы просто не должны пытаться это сделать. Почему бы просто не вызвать метод из start() (если по какой-то причине вам нужно вызвать его при запуске приложения)?   -  person James_D    schedule 05.04.2018
comment
Я делаю шахматы в JavaFX, но я уже сделал шахматы как обычный проект Java, и поэтому я хочу как-то заставить его работать с JavaFX. Но моему исходному коду нужна позиция выбранной игровой фигуры, поэтому я попытался получить позицию выбранной кнопки. Однако мне нужна эта позиция в моем основном методе, и я не знаю, как ее получить.   -  person TheWarInMyMind    schedule 06.04.2018
comment
Опять же, вы не можете получить его в основном методе. В любом случае этот метод не должен выполнять никакой реальной работы.   -  person James_D    schedule 06.04.2018
comment
@James_D Он не хочет входить в метод Main, а вместо этого получает доступ к контроллеру из метода Main.   -  person Nikiforos    schedule 06.04.2018
comment
@koulini Я знаю. Это сказано в вопросе. Как я уже говорил ранее, нет никакого способа получить доступ к любому из экземпляров контроллера (во множественном числе, примечание), которые будут созданы при загрузке файлов FXML.   -  person James_D    schedule 06.04.2018
comment
@James_D Код моего ответа делает именно это (если только я неправильно понял проблему). Я использую эту методологию в нескольких проектах JavaFX, и она отлично работает. Пожалуйста, добавьте комментарий, объясняющий, почему, если вы считаете иначе.   -  person Nikiforos    schedule 06.04.2018


Ответы (1)


Вы можете получить контроллер из FXMLLoader:

//loading scene fxml
FXMLLoader loader = new FXMLLoader(Main.class.getResource("your_path.fxml"));
Parent sceneFXML = loader.load();
//getting controller object
Controller ctrl = (Controller)(loader.getController());

Теперь вы можете получить доступ к необходимым атрибутам или методам из ctrl.

ctrl.getRow();
person Powercoder    schedule 06.04.2018