Пример использования javaFx+Абстрактная фабрика

 
 
 
Сообщения:12
Пример использования javaFx+Абстрактная фабрика


sample/main.class
package sample;


import javafx.application.Application;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import sample.Core_Windows_JavaFx.Create_Windows.Create_Windows_Interface;
import sample.Core_Windows_JavaFx.Windows_Factory;
import sample.Core_Windows_JavaFx.Windows_Object;

import java.io.IOException;



public class Main extends Application
{
    private BorderPane rootLayout;
    private Create_Windows_Interface win_first;

    @Override
    public void start(Stage primaryStage) throws Exception
    {


        //создание первоначального окна и создание Windows_object
        //windows_object содержит фабрику для реализации открытия окон
        Windows_Factory win_factory = new Windows_Object();
        createWindows(rootLayout , primaryStage , win_factory);

    }



    private void createWindows(BorderPane rootLayout , Stage primaryStage , Windows_Factory win_factory) throws IOException
    {
        //создаем Windows_Generate и возвращаем ссылку на Create_WIndows_Interface
        win_first = win_factory.Create_Windows(primaryStage,  rootLayout);
        //Создаем пустую подложку
        win_first.open_first_windows(this , "resources/view/RootLayout.fxml");
        //Создаем поверх подложки окнок
        win_first.setModalityWindowsFx("resources/view/PersonOverview.fxml", rootLayout , primaryStage , "Стартовое");
    }



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


sample/createWindows.class

package sample.createWindows;


import javafx.fxml.FXML;

public class TableViewController
{



    public void setAllFabrical()
    {


    }



    @FXML
    public void initialize()
    {



    }





}


sample/Core_Windows_JavaFx/WindowsFactory.interface
package sample.Core_Windows_JavaFx;

import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import sample.Core_Windows_JavaFx.Create_Windows.Create_Windows_Interface;

/**
 * Created by А д м и н on 19.10.2017.
 */
public interface Windows_Factory
{

    public abstract Create_Windows_Interface Create_Windows(Stage primaryStage, BorderPane rootLayout);

}

sample/Core_Windows_JavaFx/WindowsObject.class
package sample.Core_Windows_JavaFx;

import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import sample.Core_Windows_JavaFx.Create_Windows.Create_Windows_Interface;
import sample.Core_Windows_JavaFx.Create_Windows.Windows.Windows_Generate;


/**
 * Created by А д м и н on 19.10.2017.
 */
public class Windows_Object implements Windows_Factory
{

    @Override
    public Create_Windows_Interface Create_Windows(Stage primaryStage, BorderPane rootLayout)
    {
        return new Windows_Generate(primaryStage,  rootLayout);
    }
}


sample/Core_Windows_JavaFx/Create_Windows/Create_Windows_Interface.interface
package sample.Core_Windows_JavaFx.Create_Windows;

import javafx.stage.Stage;
import sample.Main;

import java.io.IOException;

/**
 * Created by А д м и н on 19.10.2017.
 */
public interface Create_Windows_Interface<T>
{
    public void open_first_windows(Main main, String patch);
    public abstract T get_root_layout(T rootLayout , String patch) throws IOException;
    public abstract Stage setModalityWindowsFx(String patch, Object rootLayout, Stage primaryStage , String titlewindows) throws IOException;
}



sample/Core_Windows_JavaFx/Create_Windows/Windows/WIndows_Generate.class

package sample.Core_Windows_JavaFx.Create_Windows.Windows;

import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import sample.Core_Windows_JavaFx.Create_Windows.Create_Windows_Interface;
import sample.Main;

import java.io.IOException;

/**
 * Created by А д м и н on 19.10.2017.
 */
public class Windows_Generate<T> implements Create_Windows_Interface
{
    Stage primaryStage;
    T rootLayout;
    FXMLLoader loader;
    Class<Main> main;
    String patch; //путь до fxml сцены

    public Windows_Generate(Stage primaryStage, T rootLayout)
    {
        this.primaryStage = primaryStage;
        this.rootLayout = rootLayout;
    }


    //Создает Новое Окно / Закрывая старое
    public void open_first_windows(Main main, String patch)
    {
        // Отображаем сцену, содержащую корневой макет.
        this.main = (Class<Main>)main.getClass();



        Scene scene = null;
        try
        {

            scene = new Scene((Parent)get_root_layout(rootLayout , patch));

        } catch (IOException e)
        {
            e.printStackTrace();
        }



        primaryStage.setScene(scene);
        primaryStage.show();

    }


    //Создает Новое окно / Поверх старых

    public Stage setModalityWindowsFx(String patch, Object rootLayout, Stage primaryStage , String titlewindows) throws IOException
    {

        // Создаем окно поверх окон
        Stage dialogStage = new Stage();
        dialogStage.setTitle(titlewindows);
        dialogStage.initModality(Modality.WINDOW_MODAL);
        dialogStage.initOwner(primaryStage);
        Scene scene = new Scene((Parent)get_root_layout((T) rootLayout, patch));
        dialogStage.setScene(scene);

        //возвращаем Stage для работы с окном
        return dialogStage;


    }




    @Override
    public Object get_root_layout(Object rootLayout, String patch) throws IOException
    {
        // Загружаем корневой макет из fxml файла.
        loader = new FXMLLoader();
        System.out.println(loader.getClassLoader());
        loader.setLocation(main.getResource(patch));

        return rootLayout = (T) loader.load();
    }


}


sample/resources/view/PersonOverview.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.PasswordField?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.image.*?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.*?>
<?import javafx.scene.text.Font?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="629.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="sample.createWindows.TableViewController" />


sample/resources/view/RootLayout.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1200.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" />
Изменен:19 окт 2017 10:10
 
 
Сообщения:12
Диаграмма возможно пригодится, да и возможно для себя оставляю. Постоянно что-то сгорает у меня

Изменен:19 окт 2017 10:15
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет