Я хочу разделить свой FXML на более мелкие файлы, каждый из которых имеет свой собственный контроллер.В основном я создаю экземпляр для каждого контроллера и получаю доступ к textAreaSample
и пытаюсь добавить текст.Я не вижу, что текст меняется.Зачем?Alert
отображает текст с этого TextArea
:
alert.setContentText(textAreaSample.getText());
Я не знаю, как установить все fxml-файлы и контроллеры.Как мне все это установить?
Вот мой основной файл `sample.fxml ':
<GridPane fx:controller="sample.ControllerSample"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<fx:include fx:id="sending" source="Sending.fxml" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
<TextArea fx:id="textAreaSample" prefWidth="200" prefHeight="200"
GridPane.columnIndex="1" GridPane.rowIndex="0" text="Sample">
</TextArea>
</GridPane>
и его контроллер:
public class ControllerSample {
@FXML
private TextArea textAreaSample;
public ControllerSample() {}
public TextArea getTextAreaSample() {
return textAreaSample;
}
public void setTextAreaSample(TextArea textAreaSample) {
this.textAreaSample = textAreaSample;
}
}
Теперь у меня естьSending.fxml
файл:
<GridPane fx:controller="sample.ControllerSending"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<fx:include fx:id="sendingPhotos" source="SendingPhotos.fxml" GridPane.columnIndex="0" GridPane.rowIndex="0"/>
</GridPane>
и его контроллер:
public class ControllerSending {
public ControllerSending() {}
}
Вот SendingPhotos.fxml
код:
<TextArea xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml"
fx:controller="sample.ControllerSendingPhotos" fx:id="textAreaSendingPhotos" prefWidth="200" prefHeight="200"
text="Photos"/>
и контроллер:
public class ControllerSendingPhotos {
@FXML
private TextArea textAreaSendingPhotos;
public ControllerSendingPhotos() {}
public TextArea getTextAreaSendingPhotos() {
return textAreaSendingPhotos;
}
public void setTextAreaSendingPhotos(TextArea textAreaSendingPhotos) {
this.textAreaSendingPhotos = textAreaSendingPhotos;
}
}
Сейчас Main.java
код:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FXMLLoader loaderSample = new FXMLLoader(getClass().getResource("sample.fxml"));
FXMLLoader loaderSending = new FXMLLoader(getClass().getResource("Sending.fxml"));
FXMLLoader loaderSendingPhotos = new FXMLLoader(getClass().getResource("SendingPhotos.fxml"));
loaderSample.load();
loaderSending.load();
loaderSendingPhotos.load();
ControllerSample controllerSample = (ControllerSample) loaderSample.getController();
ControllerSending controllerSending = (ControllerSending) loaderSending.getController();
ControllerSendingPhotos controllerSendingPhotos = (ControllerSendingPhotos) loaderSendingPhotos.getController();
TextArea textAreaSample = controllerSample.getTextAreaSample();
textAreaSample.setText("\ndebug textAreaSample\n");
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, "");
alert.setContentText(textAreaSample.getText());
alert.showAndWait();
//TextArea textAreaSendingPhotos = controllerSendingPhotos.getTextAreaSendingPhotos();
//textAreaSendingPhotos.appendText("\ndebug textAreaSendingPhotos\n");
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 800, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Редактировать: я определяю ControllerSending
в ControllerSample
с помощью геттеров и сеттеров?А потом в ControllerSending
я определяю ControllerSendingPhoto
с геттерами и сеттерами?А затем в Main, чтобы объявить ControllerSendingPhotos
Я использую controllerSample.getControllerSending().getControllerSendingPhotos()
?