У меня есть VBox
в Dialog
/DialogPane
, а дочерний элемент Group
(группа B) обертывает Group
(группа A) из Shapes
. Группа A слишком велика для экрана, поэтому я добавляю преобразование Scale к группе B, чтобы уменьшить ее размер, и это работает отлично. За исключением того, что окно как будто думает, что Node
все равно огромное, а диалог простирается далеко за пределы экрана. Родительские границы, похоже, меняются после применения масштаба, но не границы макета. Как масштабировать Group
, чтобы он повлиял на макет?
Изменить: я только что кратко описал проблему с проектом Eclipse, размещенным на BitBucket: 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);
}
}