2013-02-07 15 views
14

Ho un semplice GridPane che mostra un paio di etichette e un pulsante, ma non riesco a farlo per adattarlo allo StackPane padre. Come potrei andare avanti e farlo in modo che riempia qualsiasi contenitore in cui si trova?JavaFX - Ottieni GridPane per il genitore

GridPane g = new GridPane(); 
    g.add(new Label("Categories"),0,0); 
    g.add(new Label("Content"),1,0);   
    Button newCat = new Button("New Category"); 
    newCat.setOnAction(new EventHandler<ActionEvent>() { 
     @Override public void handle(ActionEvent e) { 
      System.out.println("Clicked"); 
     } 
    });  
    g.add(newCat,0,1); 
    g.setGridLinesVisible(true); 
    StackPane root = new StackPane(); 
    root.getChildren().add(g);   
    Scene scene = new Scene(root, 300, 250); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

L'interfaccia utente non è davvero il mio forte e qualsiasi aiuto sarebbe apprezzato.

risposta

0

Piuttosto che mettere GridPane in StackPane dovresti aggiungere la tua GridPane in HBox o VBox. È più conveniente regolare il tuo Gridpane. A proposito, hai ancora alcuni metodi come g.setPrefSize (arg0, arg1); per impostare la tua altezza e larghezza di conseguenza.

+0

lo so, ma impostando dimensione preferita doesn' t lo ridimensiona al genitore, imposta solo una dimensione che FX proverà ad usare, ma proverò a metterlo un HBox, anche se ho difficoltà a credere che possa risolvere il mio problema dal momento che non ridimensiona altri elementi come i pulsanti e così via ... Ma ci proverò ^^ –

+0

Mi spiace dirlo, ma o HBox o VBox hanno avuto alcun effetto sulla dimensione di GridPanes come fas quanto farlo riempire genitore. –

+0

@JohnMikaelGundersen prova in questo modo e regola il tuo vincolo alla griglia di conseguenza. [collegamento] http://pastebin.com/rA0Ch8ET –

0

Anche se non è ovvio, penso che GridPane sia già grande quanto il contenitore principale. Se si aggiungono le seguenti 2 righe di codice prima di "Scene scene = new Scene (root, 300, 250);", si dovrebbe essere in grado di vedere cosa sta succedendo.

root.setStyle("-fx-background-color: yellow;"); 
g.setStyle("-fx-border-color: blue;"); 
+0

Non scala al genitore per quanto posso vedere –

+0

GridPane non sa come ridistribuire il larghezza e altezza aggiuntive. Devi definirlo. Vuoi che la prima riga occupi tutto lo spazio verticale extra e che la seconda colonna occupi tutto lo spazio orizzontale extra? Hai considerato di utilizzare invece un TableView? – ytw

10

Si dovrebbe vedere questo link, in particolare la parte che riguarda Percentuale Dimensionamento. Se avete solo due colonne, ho scoperto che il codice a lavorare:

GridPane grid = new GridPane(); 
/* your code */ 
ColumnConstraints column1 = new ColumnConstraints(); 
column1.setPercentWidth(50); 
grid.getColumnConstraints().add(column1); 
+1

Questo funziona assolutamente. Stavo diventando pazzo perché la mia griglia non si adattava al genitore, ma ora lo fa. E una nota: funziona anche con più di due coulums, basta regolare i valori di conseguenza! –

+0

Grazie, ho aggiunto la tua nota alla risposta. – Videl

8

Nel caso qualcuno sarà alla ricerca di una risposta, questo è come ha funzionato per me:

@Override 
public void start(Stage stage) throws Exception { 
    stage.setTitle("Window title"); 
    GridPane grid = new GridPane(); 

    gridSetup(grid); // Building my grid elements here (2 columns) 

    // Setting columns size in percent 
    ColumnConstraints column = new ColumnConstraints(); 
    column.setPercentWidth(30); 
    grid.getColumnConstraints().add(column); 

    column = new ColumnConstraints(); 
    column.setPercentWidth(70); 
    grid.getColumnConstraints().add(column); 

    grid.setPrefSize(WINDOW_WIDTH, WINDOW_HEIGHT); // Default width and height 
    grid.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE); 

    Scene scene = new Scene(grid, WINDOW_WIDTH, WINDOW_HEIGHT); 
    stage.setScene(scene); 
    stage.show(); 
} 

Con questa impostazione la griglia occupa tutto lo spazio della finestra e si ridimensiona automaticamente con la finestra.

3

Supponiamo il layout di avere 2 colonne e 3 righe, è possibile definire le proprietà di formato delle vostre colonne e righe one-by-one:

<GridPane 
    xmlns:fx="http://javafx.com/fxml/1"  
    id="gridPane" 
    prefHeight="768.0" 
    prefWidth="1024.0">  

    <gridLinesVisible>true</gridLinesVisible> 
    <columnConstraints> 
     <ColumnConstraints percentWidth="20" /> 
     <ColumnConstraints percentWidth="80" />   
    </columnConstraints> 

    <rowConstraints> 
     <RowConstraints minHeight="50"/> 
     <RowConstraints percentHeight="80"/> 
     <RowConstraints minHeight="50"/> 
    </rowConstraints> 

</GridPane> 
Problemi correlati