Разница между панелью и группой
Мой вопрос прост : в JavaFX, в чем разница между a Pane
и A Group
? Я не могу сделать никакой разницы.
3 ответа:
A
Group
не подлежит изменению (это означает, что его размер не управляется его родителем в графе сцены) и принимает на себя объединение границ его дочерних узлов. (Другими словами, локальные границыGroup
будут наименьшим прямоугольником, содержащим границы всех дочерних узлов). Если он больше, чем пространство, которое он выделил в своем родителе, он будет обрезан.Напротив, a
Pane
можно изменять, поэтому его размер задается его родителем, который по существу определяет его размер. границы.Вот краткое демо.
Group
находится сверху, аPane
внизу. Оба содержат фиксированный синий квадрат в(100,100)
и зеленый квадрат, который перемещается нажатием клавиш со стрелками влево/вправо. Обратите внимание, как в начале синий квадрат появляется в верхнем левом углу группы, потому что локальные границы группы начинаются в самой верхней левой точке всех ее дочерних узлов (т. е. локальные границы группы простираются от(100, 100)
вправо и вниз). При перемещении зеленых прямоугольников " за пределы экрана", группа корректирует свои границы, чтобы включить изменения, где это возможно, в то время как область остается фиксированной.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); } }
Единственное важное различие между панелью и группой состоит в том, что:
Панель
- может иметь свой собственный размер, где как группа будет принимать коллективные границы своих детей и не являетсянепосредственно изменяемой.
Панель- можно использовать, если требуется расположить ее узлы в абсолютном положении.
Кроме того, обратите внимание, что группа была разработана, чтобы быть очень легкой и не поддерживает много стилей. Например, вы не можете установить цвет границы или фона для группы.
Смотрите Этот ответ для получения более подробной информации.