2016-02-11 16 views

Antwort

15

Ich denke, Sie fragen, wie Sie einen Knoten den Raum zu füllen, der seiner Zelle in einem Rasterbereich zugewiesen ist.

Es gibt mehrere Möglichkeiten, dies zu tun. Sie können entweder die statischen GridPane Methoden GridPane -spezifische Eigenschaftseinstellungen auf die Knoten anwenden:

GridPane grid = new GridPane(); 
for (int rowIndex = 0; rowIndex < numRows; rowIndex++) { 
    RowConstraints rc = new RowConstraints(); 
    rc.setVgrow(Priority.ALWAYS) ; // allow row to grow 
    rc.setFillHeight(true); // ask nodes to fill height for row 
    // other settings as needed... 
    grid.getRowConstraints().add(rc); 
} 
for (int colIndex = 0; colIndex < numColumns; colIndex++) { 
    ColumnConstraints cc = new ColumnConstraints(); 
    cc.setHgrow(Priority.ALWAYS) ; // allow column to grow 
    cc.setFillWidth(true); // ask nodes to fill space for column 
    // other settings as needed... 
    grid.getColumnConstraints().add(cc); 
} 

:

GridPane.setFillWidth(myButton, true); 
GridPane.setFillHeight(myButton, true); 

Der andere Weg für Spalten und Zeilen Einschränkungen auf dem Gitter Bereich selbst zu spezifizieren, In beiden Fällen müssen Sie die Knoten wachsen lassen, damit sie die Anforderung zum Erweitern des Grid-Bereichs erfüllen. So, z.B .:

Button myButton = new Button("Click"); 
myButton.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
grid.add(myButton, 0, 0); 

SSCCE (Zeilen- und Spaltenbedingungen Methode):

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.ColumnConstraints; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.RowConstraints; 
import javafx.stage.Stage; 

public class KeyPad extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     GridPane grid = new GridPane(); 
     int numRows = 4 ; 
     int numColumns = 3 ; 
     for (int row = 0 ; row < numRows ; row++){ 
      RowConstraints rc = new RowConstraints(); 
      rc.setFillHeight(true); 
      rc.setVgrow(Priority.ALWAYS); 
      grid.getRowConstraints().add(rc); 
     } 
     for (int col = 0 ; col < numColumns; col++) { 
      ColumnConstraints cc = new ColumnConstraints(); 
      cc.setFillWidth(true); 
      cc.setHgrow(Priority.ALWAYS); 
      grid.getColumnConstraints().add(cc); 
     } 

     for (int i = 0 ; i < 9 ; i++) { 
      Button button = createButton(Integer.toString(i+1)); 
      grid.add(button, i % 3, i/3); 
     } 
     grid.add(createButton("#"), 0, 3); 
     grid.add(createButton("0"), 1, 3); 
     grid.add(createButton("*"), 2, 3); 

     Scene scene = new Scene(grid); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private Button createButton(String text) { 
     Button button = new Button(text); 
     button.setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
     button.setOnAction(e -> System.out.println(text)); 
     return button ; 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

Ausgezeichnet! Vielen Dank! +1 und akzeptieren. – ncmathsadist

+1

Um es in CSS zu tun: (In meinem Fall war die Einstellung maxwidth unendlich genug) '.mygridPane Button { \t -fx-Max-Breite: Unendlichkeit; } ' – pdem

-3

Sie können ein GridPane in JavaFX dafür verwenden. In Java-Code können Sie es durch

GridPane pane = new GridPane(); 

erstellen und verschiedene Knoten, um es hinzuzufügen, zum Beispiel wie

Label label = new Label(); 
pane.add(label, 0,0); 

Dies wird ein Etikett auf der ersten Zeile und der ersten Spalte der GridPane hinzufügen . Für komplexere GUIs können Sie den SceneBuilder verwenden.

+1

Ich weiß, wie die Dinge zu einem Gitterfenster hinzuzufügen. Was ich will, ist zum Beispiel ein Array von Knöpfen, um die Region vollständig zu füllen, die die Gridpanel besetzt. – ncmathsadist

Verwandte Themen