2017-06-12 104 views
-2

我是JavaFX中的新手,并且随着任何新手的涌入,我充满怀疑。 所以我要填充一个<AnchorPane>儿童<Pane>这样FXML代码:JavaFx - 动态JXML,在初始化时添加窗格元素

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

<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 


<AnchorPane fx:id="anchor" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
    <children> 
     <!-- Add multiple Panels here--> 
    </children> 
</AnchorPane> 

我的控制器看起来是这样的:

package sample; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import java.net.URL; 
import java.util.ResourceBundle; 

public class Controller implements Initializable { 

    @FXML javafx.scene.layout.AnchorPane anchor; 
    @FXML javafx.scene.layout.Pane pane; 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { 

     pane.prefHeight(100); 
     pane.prefWidth(300); 
     pane.setStyle("-fx-background-color: aqua"); 

     for(int i = 0; i < 3; i++) { 
      anchor.getChildren().add(pane); 
      pane.setLayoutY(i*100); 
     } 
    } 

} 

希望有人能帮助我...谢谢!

+1

任何UI对象只能显示一次。如果你需要多次展示,你需要每次创建它的一个实例。 –

回答

0

它的解决方法是...

的FXML代码:

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

<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 

<AnchorPane fx:id="anchor" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
    <children> 
     <ScrollPane prefHeight="400.0" prefWidth="300.0"> 
     <content> 
      <GridPane fx:id="gridPane" prefHeight="410.0" prefWidth="294.0"></GridPane> 
     </content> 
     </ScrollPane> 
    </children> 
</AnchorPane> 

控制器类:

package sample; 

import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Label; 
import javafx.scene.layout.Background; 
import javafx.scene.layout.BackgroundFill; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Pane; 
import javafx.scene.text.Font; 

import java.net.URL; 
import java.util.ResourceBundle; 

public class Controller implements Initializable { 

    @FXML private GridPane gridPane; 

    private Pane paneContainer; 
    private Label paneLabel; 


    @Override 
    public void initialize(URL url, ResourceBundle resourceBundle) { 
     for(int i = 0; i<4; i++) { 

      paneLabel = new Label(); 
      paneLabel.setText("it is..." + i); 

      paneContainer = new Pane(); 
      paneContainer.setStyle("-fx-background-color: aqua; -fx-border-style: solid; -fx-border-width: 1px; -fx-border-color:#000; "); 
      paneContainer.setPrefWidth(200); 
      paneContainer.setPrefHeight(100); 

      paneContainer.getChildren().add(paneLabel); 
      gridPane.add(paneContainer, 0, i); 
     } 
    } 
} 

使用GridPane是做到这一点的最简单的办法!