/にがありVBox
、の(groupA) をラップする子(groupB)があります。groupA は画面に対して大きすぎるため、スケール変換を groupB に追加してサイズを小さくすると、完全に機能します。ただし、ウィンドウは依然として巨大であると認識しているように見え、ダイアログは画面の境界をはるかに超えて広がっています。スケールが適用された後、親の境界は変更されているように見えますが、レイアウトの境界は変更されていません。レイアウトに影響を与えるようにスケーリングするにはどうすればよいですか?Dialog
DialogPane
Group
Group
Shapes
Node
Group
編集: BitBucket でホストされている Eclipse プロジェクトの問題を簡潔に説明しました: http://v.gd/0trUMv
トグルボタンをクリックして、大小を切り替えることができます。グループが追加される前に変換が適用されることに注意してください。大きな円に切り替えると、レイアウトが子ノードのサイズ全体を考慮していることを示します。問題は、子ノードのプロパティを変更せずにその動作をオーバーライドする方法です。望ましい動作は、レイアウトの境界が小さな円のみを包含するようにすることです。
2回目の編集:ここにインラインコードがあります。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Shape;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Transform;
import javafx.stage.Stage;
public class Demo extends Application {
private Scene scene = null;
private static final String mksml = "make small";
private static final String mkbig = "make big";
private static final Transform smallScale = new Scale(0.2, 0.2);
@Override
public void start(Stage primaryStage) throws Exception {
Shape bigGraphic = new Circle(500);
Group originalBigGroup = new Group(bigGraphic);
Group transformedGroup = new Group(originalBigGroup);
transformedGroup.getTransforms().add(smallScale);
Button xformToggle = new Button(mkbig);
xformToggle.setOnMouseClicked((MouseEvent mouseEvent) -> {
switch(xformToggle.getText()) {
case mkbig:
transformedGroup.getTransforms().clear();
xformToggle.setText(mksml);
break;
case mksml:
transformedGroup.getTransforms().add(smallScale);
xformToggle.setText(mkbig);
}
});
VBox layout = new VBox(xformToggle, transformedGroup);
scene = new Scene(layout);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}