javafx — несколько сцен на одной сцене

В обычном режиме

В полноэкранном режиме

Я хочу, чтобы вторая сцена (с розовым цветом) соответствовала точному размеру anchorPane (зеленая область)

Код ниже

FormOne.fxml

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

<?import java.net.URL?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane id="AnchorPane" prefHeight="500.0" prefWidth="600.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="javafx.test.controller.FormeOneController">
    <stylesheets>
        <URL value="@/javafx/test/style/formeone.css" />
    </stylesheets>
   <children>
      <AnchorPane prefHeight="500.0" prefWidth="130.0" style="-fx-background-color: #660066;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.topAnchor="0.0">
         <children>
            <Button fx:id="btnPanel1" layoutX="31.0" layoutY="31.0" mnemonicParsing="false" onAction="#btnPanel1Action" text="Panel 1" />
            <Button fx:id="btnPanel2" layoutX="31.0" layoutY="92.0" mnemonicParsing="false" onAction="#btnPanel2Action" text="Panle 2" />
            <Button fx:id="btnPanel3" layoutX="31.0" layoutY="155.0" mnemonicParsing="false" onAction="#btnPanel3Action" text="Panle 3" />
         </children>
      </AnchorPane>
      <AnchorPane fx:id="showPane" layoutX="128.0" prefHeight="500.0" prefWidth="472.0" style="-fx-background-color: #00ff00;" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="128.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
   </children>
</AnchorPane>

PanelOne.fxml

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

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


<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-background-color: #ff00ff;" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" />

FormOneController.java

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javafx.test.controller;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;

/**
 * FXML Controller class
 *
 * @author Kasun Nirmala
 */
public class FormeOneController implements Initializable {

    @FXML
    private Button btnPanel1;
    @FXML
    private Button btnPanel2;
    @FXML
    private Button btnPanel3;
    @FXML
    private AnchorPane showPane;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

    @FXML
    private void btnPanel1Action(ActionEvent event) throws IOException {
        AnchorPane pnlOne = FXMLLoader.load(this.getClass().getResource("/javafx/test/ui/PanelOne.fxml"));
        showPane.getChildren().setAll(pnlOne);
    }

}

person kasun    schedule 19.07.2017    source источник
comment
Две внутренние AnchorPane должны быть помещены внутрь VBox.   -  person Sedrick    schedule 19.07.2017
comment
Итак, вы хотите, чтобы две AnchorPane располагались друг над другом?   -  person Sedrick    schedule 19.07.2017
comment
Я хочу загрузить внешний fxml справа от этого fxml   -  person kasun    schedule 19.07.2017


Ответы (1)


Вы можете просто сделать это, используя якоря файла AnchorPane.

@FXML
private void btnPanel1Action(ActionEvent event) throws IOException {
    AnchorPane pnlOne = FXMLLoader.load(this.getClass().getResource("/javafx/test/ui/PanelOne.fxml"));
    AnchorPane.setLeftAnchor(pnlOne, 0.0);
    AnchorPane.setTopAnchor(pnlOne, 0.0);
    AnchorPane.setRightAnchor(pnlOne, 0.0);
    AnchorPane.setBottomAnchor(pnlOne, 0.0);
    showPane.getChildren().setAll(pnlOne);
}

Что здесь происходит? Каждый узел имеет некоторые внутренние свойства. В приведенных выше строках вы устанавливаете свойство, как pnlOne должно быть размещено, когда оно является дочерним элементом AnchorPane.

person Jibbow    schedule 19.07.2017