我正在尝试找出如何设置旋转组件以填充其父窗格,例如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
,并用它来布置节点物理界限。)