Я пытаюсь автоматически изменить размер таблицы JTree в зависимости от размера шрифта. Я нашел фрагмент кода из inte rnet, который автоматически изменяет размеры строк для обычного JTable, но не работает для таблиц, имеющих реализацию JTree.
Функциональные перерывы для первого столбца. Я предполагаю, что первый столбец содержит древовидную структуру, которая расширяется и сворачивается.
Не могли бы вы, ребята, помочь мне с обходным приемом, чтобы он работал для таблиц JTree?
Ниже приведен мой код из JTreeTable, который выполняет автоматическое изменение размера:
private Map<Integer, Integer> rowMap = new HashMap<>();
private boolean quietUpdate = false;
private boolean forceUpdate = false;
@Override
public void paint(Graphics g) {
super.paint(g);
this.resizeAndRepaint();
}
@Override
public int getRowHeight(int row) {
Integer rowHeight = rowMap.get(row);
if (rowHeight == null) {
TableColumnModel model = getColumnModel();
rowHeight = getRowHeight();
for (int column = 0; column < getColumnCount(); column++) {
int colWidth = model.getColumn(column).getWidth();
Component comp = prepareRenderer(this.getCellRenderer(row, column), row, column);
comp.setSize(new Dimension(colWidth, Integer.MAX_VALUE));
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
}
rowMap.put(row, rowHeight);
quietUpdate = true;
setRowHeight(row, rowHeight);
quietUpdate = false;
}
return rowHeight;
}
@Override
public void invalidate() {
rowMap.clear();
forceUpdate = true;
super.invalidate();
forceUpdate = false;
}
@Override
protected void resizeAndRepaint() {
if (quietUpdate) {
if (forceUpdate) {
super.resizeAndRepaint();
}
} else {
super.resizeAndRepaint();
}
}