web-dev-qa-db-ja.com

ペインとグループの違いは何ですか?

JavaFXでは、PaneGroupの違いは何ですか?違いはわかりません。

17
Florian

Groupはサイズ変更できず(そのサイズはシーングラフの親によって管理されないことを意味します)、子ノードの境界の結合を引き継ぎます。 (つまり、Groupのローカル境界は、すべての子ノードの境界を含む最小の長方形になります)。親に割り当てられているスペースよりも大きい場合、クリップされます。

対照的に、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);
    }
}
27
James_D

ペインとグループのいくつかの重要な違いは次のとおりです。

  • ペインは独自のサイズを持つことができます。グループはその子の集合的な境界を取り、not直接サイズ変更可能です。
  • ペインは、ノードを絶対位置に配置するときに使用できます。
5
ItachiUchiha

また、Groupは非常に軽量に設計されており、多くのスタイルをサポートしていないことに注意してください。たとえば、グループの境界線や背景色を設定することはできません。

詳細については this answer をご覧ください。

1
Sergey Grinev