我正在使用JTable来显示多行数据。我的数据使用HTML格式化,每个单元格包含多行。我希望每当调整表的大小时,JTable行高度都会动态变化,以便能够显示所有内容。 到目前为止,我已经使用它来动态调整自定义渲染器类中的行高:
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setSize(table.getColumnModel().getColumn(column).getWidth(), (int) getPreferredSize().getHeight());
int height = getHeight();
if (table.getRowHeight(row) != height){
table.setRowHeight(row, height);
table.repaint();
}
return c;
}
问题是行的高度取决于单元格内容中的换行符数(<br />
);即如果该行有两行<br />
标记,则行高仅调整为相当于两行高。这忽略了某些行很长并且换行意味着单元格内容将超过两行的情况。
这就是我的意思。我的单元格值看起来像:
String str = "<html> "
+ "<p style = \"font-family: 'Euphemia'; font-size: 1.1em;\"> "
+ "This is a line <br /> "
+ "This is a second line which will be very long causing it to automatically wrap to a new line <br /> "
+ "This is the third line. "
+ "</p> "
+ "</html> ";
在这种情况下,由于有三个<br />
标记,行将调整为仅显示三行,因此隐藏最后一行。
我更喜欢使用html,因为它给了我想要显示内容的各种格式。
我怎么能绕过这个?
答案 0 :(得分:0)
尝试这样的计算尺寸:
public Dimension calcSize(final String text)
{
final JLabel l = new JLabel(text);
return l.getPreferredSize();
}
您可以将JLabel
移出静态字段以进行速度优化...