Разница между панелью и группой
Мой вопрос прост : в 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); } }
Единственное важное различие между панелью и группой состоит в том, что:
Панель
- может иметь свой собственный размер, где как группа будет принимать коллективные границы своих детей и не являетсянепосредственно изменяемой.
Панель- можно использовать, если требуется расположить ее узлы в абсолютном положении.
Кроме того, обратите внимание, что группа была разработана, чтобы быть очень легкой и не поддерживает много стилей. Например, вы не можете установить цвет границы или фона для группы.
Смотрите Этот ответ для получения более подробной информации.