0

Хочу сделать приложение, содержащие несколько окон, с возможностью переключения между окнами. Создал два fxml файла.

Window1

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ru.ui.Window1">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#goToWindow2" fx:id="button" />
    </children>    
</AnchorPane>

Window2

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ru.ui.Window2">
    <children>
        <Button layoutX="126" layoutY="90" text="Click Me!" onAction="#closeWindow2" fx:id="button" />
    </children>    
</AnchorPane>

Делал простой пример с одним окном. Там все просто: один контроллер и один fxml файл. А как сделать выше поставленную задачу, понять не могу. Подскажите, пожалуйста. Заранее благодарен.

1 ответ 1

2

Можно решить твою проблему следующим образом

public class Window1 extends Application {

@Override
public void start(Stage stage) throws Exception
{
    FXMLLoader loader = new FXMLLoader(getClass().getResource("Window1.fxml"));
    AnchorPane load = (AnchorPane) loader.load();

    Scene scene = new Scene(load);
    stage.setScene(scene);
    stage.setTitle("Window 1");
    stage.show();
}

public static void main(String[] args)
{
    launch(args);
}
}

Window2

public class Window2 {

public Window2() throws Exception
{
    FXMLLoader loader = new FXMLLoader(getClass().getResource("Window2.fxml"));
    AnchorPane load = (AnchorPane) loader.load();
    Stage stage = new Stage();
    stage.setTitle("Window 2");
    Scene scene = new Scene(load);
    stage.show();
}
}

Controller

public class Window1Controller implements Initializable {

@Override
public void initialize(URL url, ResourceBundle resourceBundle) {

}

public void goToWindow2(ActionEvent event) {
    try {
        new Window2();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
}

P.S. классы называются Window1 и Window2, а контроллеры для них - Window1Controller и Window2Controller.

Ты создаешь 2 класса и 2 контроллера для них. В контроллере для Window1 ты на кнопку вешаешь лисенер, в котором вызывается инициализация Window2. В Window2Controller в листенер для кнопки, ты запишешь что-то такое button.getScene().getWindow().hide()

1
  • В Window2 кажись пропущена строка: stage.setScene(scene);
    – Саша
    26 сен 2015 в 22:57

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.