Я пытаюсь выяснить, как настроить повернутый компонент, чтобы заполнить его родительскую панель, например, центр 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
и разметить узел с его физическими границами.)