2017-07-19 110 views
0

​​JavaFX的 - 在同一階段的多個場景

At full screen

我想,以適應第二個場景(用粉紅色的顏色),以適合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); 
    } 

} 
+0

兩個內部'AnchorPane'需要放在'VBox'裏面。 – Sedrick

+0

所以你想要兩個AnchorPane在彼此之上? – Sedrick

+0

我想將外部fxml加載到此fxml的右側 – kasun

回答

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); 
} 

這裏會發生什麼?每個節點都有一些內部屬性。通過上面的線條,您可以設置屬性pnlOneAnchorPane的子項中時應如何佈置。

+0

太棒了。謝謝。這工作很完美。 – kasun