Как объединить javafx GUI, созданный с помощью f xml, с javafx gui, созданным с помощью жесткого кода? - PullRequest
0 голосов
/ 21 февраля 2020

Можно ли создать кнопку на javafx f xml, используя конструктор экрана, чтобы кнопка запускала файл javafx, где ее GUI был создан с помощью кодирования.

F XML

public void start(Stage primaryStage) {
    try {
        pane.getChildren().setAll(heatMap.getHeatMapImage());
        heatMap.addEvents(events);
        AnchorPane root = (AnchorPane) FXMLLoader.load(getClass().getResource("GUI2.fxml"));
        Scene scene = new Scene(root);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

public static void main(String[] args) throws NumberFormatException, IOException {
    // BasicConfigurator.configure();

    launch(args);
}

JAVAFX GUI СОЗДАН КОДОМ

@Override
public void start(Stage stage) throws Exception {
    pane.getChildren().setAll(heatMap.getHeatMapImage());
    HBox hbox = new HBox(pane); 

    // set spacing 
    hbox.setSpacing(10); 
    // set alignment for the HBox 
    hbox.setAlignment(Pos.CENTER); 

    // create a scene 
    Scene Overlay = new Scene(hbox, 1000, 600); 
    FileInputStream input = new FileInputStream("C:\\Users\\User\\Downloads\\map.jpeg");
    Image image = new Image(input);
    BackgroundImage backgroundimage = new BackgroundImage(image,  
                                        BackgroundRepeat.NO_REPEAT,  
                                        BackgroundRepeat.NO_REPEAT,  
                                        BackgroundPosition.DEFAULT,  
                                           BackgroundSize.DEFAULT); 
    Background background = new Background(backgroundimage);
    hbox.setBackground(background);

    stage.setTitle("JavaFX HeatMap Demo");
    stage.setScene(Overlay);
    stage.show();
    heatMap.addEvents(events);

}

public static void main(String[] args) {
    Dimension2D mapDimension = new Dimension2D(1500, 1577);
    Point2D     upperLeft    = new Point2D(0, 9.8);
    Point2D     lowerRight   = new Point2D(53.45, 10.2);
    Point2D     location     = new Point2D(53.7, 9.95);

    //System.out.println(Helper.latLongToPixel(mapDimension, upperLeft, lowerRight, location));

    launch(args);
}

Так что мой вопрос будет, как мне назвать мой JAVAFX GUI созданный кодом из файла f xml?

1 Ответ

0 голосов
/ 22 февраля 2020

Определите GUI в файле fxml и укажите его контроллер:

GUI2.f xml

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

<?import javafx.scene.layout.StackPane?>

<StackPane fx:id="root" prefHeight="150.0" prefWidth="200.0" xmlns="http://javafx.com/javafx/10.0.1" 
xmlns:fx="http://javafx.com/fxml/1" fx:controller="fx_tests.GUI2Controller" />

Выполните инициализацию в контроллере. Добавьте получатели для информации, которую вы хотите получить из контроллера позже:

import javafx.fxml.FXML;
import javafx.geometry.Point2D;
import javafx.scene.layout.StackPane;

public class GUI2Controller{

    @FXML StackPane root;
    private Point2D[] events;
    private SimpleHeatMap heatMap;

    @FXML
    public void initialize() {

        //initialize here all info that you want to retrieve later
        heatMap = new SimpleHeatMap(400, 400, ColorMapping.LIME_YELLOW_RED, 40);
        events  = new Point2D[] {
                new Point2D(110, 238),
                new Point2D(120, 144),
                new Point2D(207, 119),
                new Point2D(315, 348),
                new Point2D(264, 226),
                new Point2D(280, 159),
                new Point2D(240, 186),
                new Point2D(228, 170),
                new Point2D(234, 160),
                new Point2D(214, 170),
                new Point2D(200, 200),
        };

        //you could also populate root
        //root.getChildren().setAll(heatMap.getHeatMapImage());
    }

    public SimpleHeatMap getHeatMap() {
        return heatMap;
    }

    public  Point2D[] getEvents() {
        return events;
    }
}

Используйте его в приложении:

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class FxmlTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {

            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("GUI2.fxml"));
            Pane root = fxmlLoader.load();
            GUI2Controller controller = fxmlLoader.getController(); 

            //retrieve info from controller 
            SimpleHeatMap heatMap = controller.getHeatMap();
            Point2D[] events = controller.getEvents();

            //todo: use as needed 
            primaryStage.setScene(new Scene(root));
            primaryStage.show();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...