Получить высоту ячейки в javafx TableView
Я не могу найти способ программно получить размер ячейки, определяя индексы строк и столбцов в javafx.scene.control.TableView.
Как я могу найти TableCell или TableColumn по индексу строки и столбца?
Я много искал, но ничего не нашел.
Спасибо паоло
1 ответ
Я не нашел четкого способа сделать это, но для целей тестирования должно работать следующее:
- пересечь сцену таблицы
- заметьте строки и столбцы на своем пути
- как только вы доберетесь до клетки, у вас будет номер строки и столбца
- определите, хотите ли вы ячейку, и рассчитайте ее высоту
Траверс-метод:
// run it next way: traverse(table, -1, -1);
public void traverse(Node node, int row, int column) {
//System.out.println(node.getClass()); // uncomment to see how traverse works
// once we found a TableRow all children are from that row, so we save it's number
int newRow = (node instanceof TableRow) ? ((TableRow) node).getIndex() : row;
// same for the column, although there would be only one child
int newColumn = (node instanceof TableCell) ? ((TableCell)node).getIndex() : column;
// in my demo table cells are text, change to your implementation class for custom cells
if (node.getClass().getName().contains("LabeledText")) {
String text = ((com.sun.javafx.scene.control.skin.LabeledText) node).getText();
if (!text.isEmpty()) { // this check is just to filter empty rows
System.out.println("### " + text);
System.out.println("# Row: " + row + " Column: " + column);
System.out.println("# Height: " + node.getBoundsInParent().getHeight());
}
}
// traverse code
if (node instanceof Parent) {
Parent parent = (Parent) node;
parent.getChildrenUnmodifiable().forEach(n -> traverse(n, newRow, newColumn));
}
}
Полный образец: https://pastebin.com/A7cTvq4i