У меня есть приложение JavaFX, которое создает начальный этап и сцену, разделенную на 3 части (горизонтальное меню: черный, VBox с основным содержимым: красный, Vbox с нижним колонтитулом: синий). Через соответствующие кнопки пользователь может проходить различные сцены, загруженные в основной контент VBox. Данные каждого элемента управления в каждом fmxl хранятся в данных объекта типа «Данные». Вопрос заключается в том, как я могу установить специфические c данные, хранящиеся в объекте данных, в элементы управления каждого f xml, когда пользователь переходит ко второй и третьей сцене (назад и вперед). Другими словами, если пользователь запрашивает вторую сцену, в элементе управления tf3 (который является TextField) должно быть записано значение data.tf3, которое было сохранено в объекте данных.
Заранее спасибо!
Основной. java
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
public static Data data = new Data();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
Scene scene = new Scene(root, 640, 480);
primaryStage.setTitle("Demo");
primaryStage.setScene(scene);
primaryStage.sizeToScene();
primaryStage.show();
}
}
Данные. java
public class Data {
public String textField1;
public String textField2;
public String textField3;
public String textField4;
public int checkBox;
}
MainController. java
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
public class MainController {
@FXML private TextField tf1;
@FXML private TextField tf2;
@FXML private CheckBox cb;
@FXML private Button btToSecondScene;
@FXML private VBox mainPane;
@FXML
void initialize() {
}
public void onButtonToSecondSceneClicked(ActionEvent event) throws IOException
{
getData();
VBox pane = FXMLLoader.load(getClass().getResource("SecondScene.fxml"));
mainPane.getChildren().setAll(pane);
}
public void getData() {
Main.data.textField1 = tf1.getText();
Main.data.textField2 = tf2.getText();
Main.data.checkBox = cb.isSelected() ? 1 : 0;
}
public void setData() {
tf1.setText(Main.data.textField1);
tf2.setText(Main.data.textField2);
cb.isSelected();
}
}
SecondController. java
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
public class SecondController {
@FXML private TextField tf3;
@FXML private Button btToThirdScene;
@FXML private VBox mainPane;
public void onButtonToThirdSceneClicked(ActionEvent event) throws IOException
{
VBox pane = FXMLLoader.load(getClass().getResource("ThirdScene.fxml"));
mainPane.getChildren().setAll(pane);
}
}
ThirdController. java
import java.io.IOException;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
public class ThirdController {
@FXML private TextField tf4;
@FXML private Button btToSecond;
@FXML private VBox mainPane;
public void onButtonToSecondClicked(ActionEvent event) throws IOException
{
VBox pane = FXMLLoader.load(getClass().getResource("SecondScene.fxml"));
mainPane.getChildren().setAll(pane);
}
}
Main.f xml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.paint.Color?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MainController">
<children>
<VBox prefHeight="480.0" prefWidth="640.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<MenuBar prefHeight="27.0" prefWidth="1281.0">
<menus>
<Menu mnemonicParsing="false" text="File">
<items>
<MenuItem mnemonicParsing="false" text="Close" />
</items>
</Menu>
</menus>
</MenuBar>
<VBox fx:id="mainPane" prefHeight="761.0" prefWidth="1280.0" VBox.vgrow="ALWAYS">
<children>
<AnchorPane prefHeight="412.0" prefWidth="1280.0" VBox.vgrow="ALWAYS">
<children>
<VBox prefHeight="200.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="15.0" AnchorPane.rightAnchor="15.0" AnchorPane.topAnchor="15.0">
<children>
<Label prefHeight="17.0" text="Text Field 1">
<VBox.margin>
<Insets left="10.0" top="10.0" />
</VBox.margin>
<graphic>
<TextField fx:id="tf1" />
</graphic>
</Label>
<Label layoutX="20.0" layoutY="20.0" prefHeight="17.0" text="Text Field 2">
<graphic>
<TextField fx:id="tf2" />
</graphic>
<VBox.margin>
<Insets left="10.0" top="10.0" />
</VBox.margin>
</Label>
<CheckBox fx:id="cb" mnemonicParsing="false" text="CheckBox">
<VBox.margin>
<Insets left="10.0" right="10.0" top="10.0" />
</VBox.margin>
</CheckBox>
</children>
</VBox>
</children>
</AnchorPane>
<AnchorPane prefHeight="164.0" prefWidth="1280.0" VBox.vgrow="ALWAYS">
<children>
<Button fx:id="btToSecondScene" layoutX="947.0" layoutY="75.0" mnemonicParsing="false" onAction="#onButtonToSecondSceneClicked" prefHeight="50.0" prefWidth="200.0" text="To Second Scene ->" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="15.0">
<font>
<Font size="14.0" />
</font>
</Button>
</children>
</AnchorPane>
<AnchorPane prefHeight="154.0" prefWidth="1280.0" VBox.vgrow="ALWAYS" />
</children>
</VBox>
<HBox id="HBox" alignment="CENTER_LEFT" prefHeight="1.0" prefWidth="1380.0" spacing="5.0">
<children>
<Label maxWidth="-1.0" prefWidth="98.0" text="Main Program" HBox.hgrow="ALWAYS">
<font>
<Font name="System Bold" size="11.0" />
</font>
<textFill>
<Color blue="0.625" green="0.625" red="0.625" />
</textFill>
</Label>
<Pane prefHeight="0.0" prefWidth="1156.0" HBox.hgrow="ALWAYS" />
</children>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</HBox>
</children>
</VBox>
</children>
</AnchorPane>
SecondScene.f xml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<VBox fx:id="mainPane" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="SecondController">
<children>
<AnchorPane>
<children>
<VBox prefHeight="230.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="15.0" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="17.0" text="Text Field 3">
<graphic>
<TextField fx:id="tf3" />
</graphic>
</Label>
</children>
</AnchorPane>
<AnchorPane prefHeight="154.0" prefWidth="1280.0">
<children>
<Button fx:id="btToThirdScene" mnemonicParsing="false" onAction="#onButtonToThirdSceneClicked" prefHeight="50.0" prefWidth="200.0" text="To Third Scene --->" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="15.0" />
</children>
</AnchorPane>
</children>
</VBox>
ThirdScene.fmxl
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.VBox?>
<VBox fx:id="mainPane" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ThirdController">
<children>
<AnchorPane>
<children>
<VBox prefHeight="230.0" prefWidth="100.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="15.0" />
<Label layoutX="10.0" layoutY="10.0" prefHeight="17.0" text="Text Field 4">
<graphic>
<TextField fx:id="tf4" />
</graphic>
</Label>
</children>
</AnchorPane>
<AnchorPane prefHeight="154.0" prefWidth="1280.0">
<children>
<Button fx:id="btToMainScene" mnemonicParsing="false" onAction="#onButtonToSecondClicked" prefHeight="50.0" prefWidth="200.0" text="<--- To Second Scene" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="15.0" />
</children>
</AnchorPane>
</children>
</VBox>