2017-06-12 16 views
-2

私はJavaFXで新しく、どんな初心者でも、私は疑念を抱いています。 は、だから私は、このFXMLコードのような子供たちと<AnchorPane><Pane>を移入する必要があります。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オブジェクトは1回しか表示できません。何かを何度も表示する必要がある場合は、必要なたびにそのインスタンスを作成する必要があります。 –

答えて

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はそれを行うための最も簡単な方法です!

関連する問題