2015-06-17 19 views

risposta

21

A Group non è ridimensionabile (ovvero la sua dimensione non è gestita dal relativo genitore nel grafico di scena) e assume l'unione dei limiti dei relativi nodi figlio. (Quindi, in altre parole, i limiti locali di un Group saranno il rettangolo più piccolo che contiene i limiti di tutti i nodi figlio). Se è più grande dello spazio che è assegnato al suo genitore, verrà ritagliato.

Al contrario, uno Pane è ridimensionabile, quindi le sue dimensioni sono impostate dal suo genitore, che essenzialmente ne determina i limiti.

Ecco una breve demo. Lo Group è in alto e lo Pane in basso. Entrambi contengono un quadrato blu fisso a (100,100) e un quadrato verde che viene spostato premendo i tasti freccia sinistra/destra. Nota come all'inizio il quadrato blu appare nell'angolo in alto a sinistra del gruppo, perché i limiti locali del gruppo iniziano nel punto più a sinistra di tutti i suoi nodi figli (cioè i limiti locali del gruppo si estendono da destra (100, 100) e giù). Mentre si spostano i rettangoli verdi "fuori dallo schermo", il gruppo regola i propri limiti per incorporare le modifiche, laddove possibile, mentre il riquadro rimane fisso.

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.Priority; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class GroupVsPaneDemo extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Pane pane = new Pane(); 
     Group group = new Group(); 

     VBox.setVgrow(group, Priority.NEVER); 
     VBox.setVgrow(pane, Priority.NEVER); 

     VBox vbox = new VBox(group, pane); 


     Rectangle rect1 = new Rectangle(100, 100, 100, 100); 
     Rectangle rect2 = new Rectangle(100, 100, 100, 100); 
     Rectangle rect3 = new Rectangle(200, 200, 100, 100); 
     Rectangle rect4 = new Rectangle(200, 200, 100, 100); 
     rect1.setFill(Color.BLUE); 
     rect2.setFill(Color.BLUE); 
     rect3.setFill(Color.GREEN); 
     rect4.setFill(Color.GREEN); 

     group.getChildren().addAll(rect1, rect3); 
     pane.getChildren().addAll(rect2, rect4); 

     Scene scene = new Scene(vbox, 800, 800); 
     scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> { 
      double deltaX ; 
      switch(e.getCode()) { 
       case LEFT: 
        deltaX = -10 ; 
        break ; 
       case RIGHT: 
        deltaX = 10 ; 
        break ; 
       default: 
        deltaX = 0 ; 
      } 
      rect3.setX(rect3.getX() + deltaX); 
      rect4.setX(rect4.getX() + deltaX); 
     }); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

Oh grazie mille! La tua demo è perfetta. – Florian

4

I pochi importante differenza tra Pane e il Gruppo è che:

  • Pane può avere la propria dimensione, dove come un gruppo assumerà i limiti collettivi dei suoi figli ed è non direttamente ridimensionabile.
  • Il riquadro può essere utilizzato quando si desidera posizionare i nodi in posizione assoluta.
+0

Penso che si possa usare anche un gruppo per posizionare i suoi nodi figli in una posizione assoluta (i parametri 'layoutX' e' layoutY' funzionano). – gbmhunter

0

Inoltre, si noti che Group è stato progettato per essere molto leggero e non supporta molti stili. Ad esempio, non è possibile impostare il colore di sfondo o di sfondo per il gruppo.

Vedere this answer per ulteriori dettagli.