Инициализация кнопки в JavaFX?

Добрейший день. Подскажите почему у меня не работает кнопка. При нажатии она должна менять Scene, но почему то этого не происходит. Посмотрел целую кучу обучающих видео и не меньше прочитал статей. Вот код.
FXML главной сцены:
<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<Pane fx:id="root" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main">
   <children>
      <Button fx:id="btngsc" layoutX="14.0" layoutY="60.0" mnemonicParsing="false" prefHeight="65.0" prefWidth="223.0" style="-fx-background-radius: 40; -fx-background-color: #778899;" text="Получить сим-карту">
         <font>
            <Font name="Arial Italic" size="19.0" />
         </font>
      </Button>
      <Button fx:id="help" layoutX="14.0" layoutY="139.0" mnemonicParsing="false" prefHeight="65.0" prefWidth="223.0" style="-fx-background-radius: 40; -fx-background-color: #778899;" text="Помогите!!!">
         <font>
            <Font name="Arial Italic" size="19.0" />
         </font>
      </Button>
      <Label alignment="CENTER" layoutX="28.0" layoutY="14.0" prefHeight="32.0" prefWidth="745.0" text="Добрый день! Если вы хотите получить сим-карту, нажмите на кнопку &quot;Получить сим-карту&quot;.">
         <font>
            <Font name="Arial Italic" size="16.0" />
         </font>
      </Label>
      <Rectangle arcHeight="5.0" arcWidth="5.0" fill="#ffffff00" height="543.0" layoutX="249.0" layoutY="43.0" stroke="BLACK" strokeType="INSIDE" width="518.0" />
   </children>
</Pane>

FXML Сцены, на которую нужно перейти:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.media.MediaView?>
<?import javafx.scene.text.Font?>


<Pane fx:id="gsc" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Main">
   <children>
      <AnchorPane fx:id="root1" maxHeight="600.0" maxWidth="800.0" minHeight="600.0" minWidth="800.0" prefHeight="600.0" prefWidth="800.0">
         <children>
            <Label layoutX="386.0" layoutY="14.0" text="Для продолжения посмотрите обучающий видеоролик. Если вы и так все знаете можно пропустить этот пункт и перейти к получению сим-карты, для этого нажмите кнопку: &quot;Далее&quot;." textAlignment="CENTER" wrapText="true" AnchorPane.leftAnchor="16.0" AnchorPane.rightAnchor="16.0" AnchorPane.topAnchor="14.0">
               <font>
                  <Font name="Arial Italic" size="16.0" />
               </font>
            </Label>
            <MediaView fitHeight="450.0" fitWidth="450.0" layoutX="175.0" layoutY="75.0" AnchorPane.topAnchor="75.0" />
            <Button fx:id="nextbtngsc" layoutX="514.0" layoutY="525.0" maxHeight="65.0" maxWidth="223.0" minHeight="65.0" minWidth="223.0" mnemonicParsing="false" prefHeight="65.0" prefWidth="223.0" style="-fx-background-color: #778899; -fx-background-radius: 40;" text="Далее">
               <font>
                  <Font name="Arial Italic" size="19.0" />
               </font>
            </Button>
            <Button fx:id="backngsc" layoutX="64.0" layoutY="525.0" maxHeight="65.0" maxWidth="223.0" minHeight="65.0" minWidth="223.0" mnemonicParsing="false" prefHeight="65.0" prefWidth="223.0" style="-fx-background-color: #778899; -fx-background-radius: 40;" text="Назад">
               <font>
                  <Font size="19.0" />
               </font>
            </Button>
         </children>
      </AnchorPane>
   </children>
</Pane>

Главный класс программы:
package sample;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

import java.io.IOException;


public class Main extends Application { // главный класс.

    private Stage stage = null;
    private BorderPane sukapane;
    private Scene scene, gscScene;

    @FXML
    private Button btngsc;
    @FXML
    private Pane root;
    @FXML
    private Pane gsc;

    public void start(Stage stage) throws Exception{ //Создаем Stage
        this.stage = stage;
        stage.setTitle("PromskyAppTerminal");
        //Вызываем методы инициализации Scene
        initSample();
        showPersonOverview();
    }

    private void initSample() {//Инициализация пустой сцены(как-бы оболочка)

        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("suka.fxml"));
            sukapane = (BorderPane) loader.load();
            scene = new Scene(sukapane, 800, 600);
            stage.setScene(scene);
            stage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private void showPersonOverview() {// Инициализация главного окна

        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("sample.fxml"));
            root = (Pane) loader.load();
            sukapane.setCenter(root);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @FXML
    public void initialize(){//работаем с кнопкой(на данный момент с одной)

        btngsc.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                FXMLLoader loader1 = new FXMLLoader();
                loader1.setLocation(getClass().getResource("getsimcard.fxml"));
                try {
                    gsc = (Pane) loader1.load();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                gscScene = new Scene(gsc, 800, 600);
                stage = null;
                stage.setScene(gscScene);

            }
        });

    }

    public Stage getStage() {
        return stage;
    }

    public static void main(String[] args) { // Здесь пишется вся логика.

        launch(args); // Запуск программы.

    }

}

Ребят, очень надеюсь на вашу помощь.
  • Вопрос задан
  • 1839 просмотров
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Жесть какая.
1) Для начала не надо объединять контроллеры между собой да еще и с классом в котором main().
2) Для каждого fxml делай свой отдельный контроллер, хотя бы каши небудет.
3) В Main классе оставь только функцию main и start. Переменную stage сделай публичной и статичной.
4) Событие нажатия на кнопку для простоты можешь не писать ручками а также объявить прямо в fxml название функции которую он будет вызывать.
5) в создании ты вызываешь initSample() и следом showPersonOverview(); , так нельзя. Меняй сцену только через stage.setScene(сцена);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы