2017-06-12 2 views
-2

Ich bin neu in JavaFX, und wie jeder Newcomer, bin ich überschwemmt mit Zweifeln. Also muss ich eine <AnchorPane> mit Kindern <Pane> wie dieses FXML Code füllen:JavaFx - Dynamische JXML, fügen Element Element auf Initialize

<?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> 

My-Controller wie folgt aussieht:

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

} 

Hoffnung jemand kann mir helfen ... Danke !!

+1

Jedes UI-Objekt kann nur einmal angezeigt werden. Wenn Sie etwas mehrmals anzeigen müssen, müssen Sie jedes Mal eine Instanz davon erstellen. –

Antwort

0

Die Lösung dafür ist ...

Der FXML Code:

<?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> 

Die Controller-Klasse:

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

Verwenden GridPane ist der einfachste Weg, es zu tun!

Verwandte Themen