javafx - Pane 和组有什么区别?

标签 javafx pane

在 JavaFX 中, PaneGroup 有什么区别?我看不出有什么区别。

最佳答案

Group 不可调整大小(意味着它的大小不由其在场景图中的父节点管理),并采用其子节点边界的并集。 (因此,换句话说,Group 的局部边界将是包含所有子节点边界的最小矩形)。如果它大于它在其父级中分配的空间,它将被剪裁。

相比之下,Pane 是可调整大小的,因此它的大小由其父级设置,这基本上决定了它的边界。

这是一个快速演示。 Group 位于顶部,Pane 位于下方。两者都在 (100,100) 处包含一个固定的蓝色方 block 和一个通过按左/右箭头键移动的绿色方 block 。注意一开始,蓝色方 block 出现在组的左上角,因为组的局部边界从其所有子节点的最左上角开始(即组的局部边界从 (100, 100) 向右延伸和向下)。当您将绿色矩形“移出屏幕”时,该组会尽可能调整其边界以合并更改,而 Pane 则保持固定。

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);
    }
}

关于javafx - Pane 和组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30901185/

相关文章:

java播放mp3声音

java - 使用 List<String> 填充 Java FX 组合框

java - 如何只打印文本?

JavaFX 子 AnchorPane 添加到父 AnchorPane 后不显示

java - 如何在 FXML 中打印选定的 Pane

javascript - Google map - 更改图 block 叠加层的 Pane 顺序?

java - 在 JavaFX 中设置 stackPane 大小

JavaFX 将数据添加到表中

JavaFX,为什么锚定 Pane 中的像素值是双倍的?例如,如果输入 10.5 会发生什么?

java - 如何在不使用 setGridLinesVisible() 方法的情况下永久显示 GridPane 对象网格线?