La mia domanda è semplice: in JavaFX, qual è la differenza tra uno Pane
e uno Group
? Non posso fare alcuna differenza.Differenza tra riquadro e gruppo
risposta
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);
}
}
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.
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
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.
Oh grazie mille! La tua demo è perfetta. – Florian