JavaFX 2.0 FXML Child Windows

Po wielu poszukiwaniach znalazłem to pytanieJak utworzyć MDI aplikacji javafx 2.0. Naprawdę chciałem wiedzieć, czy mogę utworzyć wyskakujące okno lub okno potomne do głównego okna przy użyciu komponentów JavaFX i Kreatora scen, aby utworzyć nowe okno.

Skończyło się na tym dla modalnego okna pop-up:

W klasie głównej chciałem zapisać etap podstawowy do pola, do którego mogę uzyskać dostęp z mojej podstawowej klasy kontrolera. Dodałem zmienną statycznąEtap do tego i to wMain.Start () metoda:

primaryController.primaryStage = primaryStage;

Jest to metoda, której używa przycisk w kontrolerze primaryController:

public void OnBtnShowChild(ActionEvent event) {
    MessageBoxController msgBox = new MessageBoxController();
    try {
        msgBox.showMessageBox(primaryStage);
    } catch (Exception e) {
        e.printStackTrace(); 
    }
}

To jest klasa MessageBoxController, którą stworzyłem przy pomocy Scene Builder. Ma podstawowy układ standardowego wyskakującego okienka, które może być używane do wyświetlania ikony (ImageView), TextBox (dla tekstu wiadomości) i dwóch przycisków (dla funkcji TAK / NIE). Nie jestem jeszcze pewien, jak przekazać wyniki tego, jaki przycisk został wciśnięty z powrotem do podstawowego kontrolera.

public class MessageBoxController implements Initializable {

@FXML
// fx:id="btnNo"
private Button btnNo; // Value injected by FXMLLoader

@FXML
// fx:id="btnYes"
private Button btnYes; // Value injected by FXMLLoader

@FXML
// fx:id="imgMessage"
private ImageView imgMessage; // Value injected by FXMLLoader

@FXML
// fx:id="txtMessage"
private TextField txtMessage; // Value injected by FXMLLoader

private Stage myParent;
private Stage messageBoxStage;

public void showMessageBox(Stage parentStage) {
    this.myParent = parentStage;

    try {
        messageBoxStage = new Stage();
        AnchorPane page = (AnchorPane) FXMLLoader.load(MessageBoxController.class.getResource("/MessageBox/MessageBoxFXML.fxml"));
        Scene scene = new Scene(page);
        messageBoxStage.setScene(scene);
        messageBoxStage.setTitle("Message Box");
        messageBoxStage.initOwner(this.myParent);
        messageBoxStage.initModality(Modality.WINDOW_MODAL);
        messageBoxStage.show();
    } catch (Exception ex) {
        System.out.println("Exception foundeth in showMessageBox");
        ex.printStackTrace();
    }
}
@Override
public void initialize(URL fxmlFileLocation, ResourceBundle arg1) {
    txtMessage.setText("Howdy");

}

public void OnBtnYes(ActionEvent event) {

}

public void OnBtnNo(ActionEvent event) {

}

}

I wreszcie, to jest plik FXML, który stworzyłem w Scene Builder:

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

<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane2" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"   
      prefHeight="172.0" prefWidth="524.0" xmlns:fx="http://javafx.com/fxml" fx:controller="MessageBox.MessageBoxController">
  <children>
    <VBox prefHeight="172.0" prefWidth="524.0" styleClass="vboxes" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
      <children>
        <HBox alignment="CENTER" prefHeight="109.99990000000253" prefWidth="516.0" spacing="30.0">
          <children>
            <ImageView fx:id="imgMessage" fitHeight="110.0" fitWidth="146.66666666666666" pickOnBounds="true" preserveRatio="true" styleClass="null" />
            <TextField fx:id="txtMessage" editable="false" prefHeight="47.0" prefWidth="325.0" />
          </children>
          <stylesheets>
        <URL value="@MyCSS.css" />
      </stylesheets>
    </HBox>
    <HBox alignment="CENTER" prefHeight="58.0" prefWidth="516.0" spacing="30.0">
      <children>
        <Button fx:id="btnYes" mnemonicParsing="false" onAction="#OnBtnYes" text="Button" />
        <Button fx:id="btnNo" mnemonicParsing="false" onAction="#OnBtnNo" text="Button" />
      </children>
    </HBox>
  </children>
  <stylesheets>
    <URL value="@MyCSS.css" />
  </stylesheets>
</VBox>
</children>
<stylesheets>
<URL value="@MyCSS.css" />
</stylesheets>
</AnchorPane>

Dzięki temu mogę utworzyć modalne okienko wyskakujące, a także chcę utworzyć inne okna potomne do wyświetlania danych w inny sposób, używając różnych formantów. I, co najważniejsze, mogę użyć Kreatora scen do stworzenia układu.

Co myślisz? Czy jest to dobry sposób na zrobienie tego, dopóki nie dodadzą rzeczywistej obsługi Java 8 i JavaFX 8?

questionAnswers(1)

yourAnswerToTheQuestion