javafx - item - ¿Cuál es la diferencia entre un panel y un grupo?
javafx combobox get selected item (3)
Además, tenga en cuenta que el Grupo fue diseñado para ser muy ligero y no admite muchos estilos. Por ejemplo, no puede establecer el borde o el color de fondo para el grupo.
Ver esta respuesta para más detalles.
En JavaFX, ¿cuál es la diferencia entre un Pane
y un Group
? No puedo distinguir ninguna diferencia.
La pequeña diferencia importante entre Pane y Group es que:
- El panel puede tener su propio tamaño, donde, como grupo, asumirá los límites colectivos de sus hijos y no se podrá redimensionar directamente.
- El panel se puede utilizar cuando desea colocar sus nodos en posición absoluta.
Un Group
no es redimensionable (lo que significa que su tamaño no está administrado por su padre en el gráfico de la escena), y asume la unión de los límites de sus nodos secundarios. (Así, en otras palabras, los límites locales de un Group
serán el rectángulo más pequeño que contiene los límites de todos los nodos secundarios). Si es más grande que el espacio que está asignado en su padre, se recortará.
Por el contrario, un Pane
se puede redimensionar, por lo que su tamaño se establece por su padre, que esencialmente determina sus límites.
Aquí hay una demostración rápida. El Group
está en la parte superior y el Pane
abajo. Ambos contienen un cuadrado azul fijo en (100,100)
y un cuadrado verde que se mueve presionando las teclas de flecha izquierda / derecha. Observe cómo al principio, el cuadrado azul aparece en la esquina superior izquierda del grupo, porque los límites locales del grupo comienzan en el punto superior izquierdo de todos sus nodos secundarios (es decir, los límites locales del grupo se extienden desde (100, 100)
derecha y abajo). Al mover los rectángulos verdes "fuera de la pantalla", el grupo ajusta sus límites para incorporar los cambios, siempre que sea posible, mientras que el panel permanece fijo.
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);
}
}