JavaFX旋转节点以填充窗格

时间:2018-09-27 19:30:37

标签: java javafx

我正在尝试找出如何设置旋转组件以填充其父窗格,例如BorderPane的中心。此示例带有TableÍView,显示了解释的行为:

public class TableViewSample0 extends Application {

    private final TableView table = new TableView();
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        stage.setTitle("Table View Sample");
        stage.setWidth(300);
        stage.setHeight(500);

        final Label label = new Label("Address Book");
        label.setFont(new Font("Arial", 20));

        table.setEditable(true);
        // table.setRotate(-90); // uncomment to rotate

        TableColumn firstNameCol = new TableColumn("First Name");
        TableColumn lastNameCol = new TableColumn("Last Name");
        TableColumn emailCol = new TableColumn("Email");

        table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);

        BorderPane pane = new BorderPane(table);
        stage.setScene(new Scene(pane));
        stage.show();
    }
}

通过取消注释旋转线,可以看到行为是如何中断的:工作台的宽度变化会导致桌子的高度发生变化,而高度会影响桌子的宽度。好像它没有旋转。

我的理解是,这是由于layoutBounds不受转换影响而引起的,它们被用来在父级中布置节点。

教科书解决方案是将表格放在一个组中,但是这将使组件无法填充窗格(new BorderPane(new Group(table)))。我还尝试编写一个具有覆盖layoutChildren的自定义区域,但是由于旋转后x / y坐标总是被弄乱,所以我无法使其工作。

我希望有人能指出我正确的方向。 (我现在唯一的解决方案是使用一个组,并将表的宽度/高度绑定到窗格的尺寸。但是,我觉得可能有更好的方法:基本上覆盖layoutBounds,并用它来布置节点物理界限。)

0 个答案:

没有答案