基本上:我的JTable每行需要特殊的行高。使用的每个渲染器将每个单元格的请求行高写入表中的映射,该表具有方法updateRowHeights
,该方法使用映射来设置行高。问题是具有行高的地图仅由渲染器填充高度。因此,第一次渲染表时,地图仍然是空的。因此,当第一次没有设置行高时显示表格。
作为一个不那么漂亮的解决方法,我在我的表中添加了一个组件监听器,用于更新行高。这在大多数情况下都可以正常工作,但是例如当表格位于tabbedpane内的滚动窗格中时不会调用它。我最好有一个方法onRenderingFinished
或类似的方法,我可以在其中调用行高法。
我正在做How to set the RowHeight dynamically in a JTable的第一个回答。在那里提到你不应该在渲染器内改变你的表的行高(我同意这一点),并且在初始化完成后你设置它(调用updateRowHeight
)一次,无论何时何地它所依赖的国家的情况发生了变化。"
所以我的问题是:我在何时/何时致电updateRowHeight
?
是否有一个事件告诉我渲染器已完成?
答案 0 :(得分:2)
如果您只想更新依赖于最高单元格高度的表格行高度,则只需在设置表格内容后调用此方法。
public static void updateRowHeight(JTable table, int margin) {
final int rowCount = table.getRowCount();
final int colCount = table.getColumnCount();
for (int i = 0; i < rowCount; i++) {
int maxHeight = 0;
for (int j = 0; j < colCount; j++) {
final TableCellRenderer renderer = table.getCellRenderer(i, j);
maxHeight = Math.max(maxHeight, table.prepareRenderer(renderer, i, j).getPreferredSize().height);
}
table.setRowHeight(i, maxHeight + margin);
}
}
保证金是可选参数,为每一行提供额外的空间(可以是0或正数)。
请注意:当表格非常大和/或包含大量HTML字符串时,此方法可能会引发性能问题。