动态设置JTable行高

时间:2017-06-23 14:26:20

标签: java jtable

我正在使用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,因为它给了我想要显示内容的各种格式。 我怎么能绕过这个?

1 个答案:

答案 0 :(得分:0)

尝试这样的计算尺寸:

public Dimension calcSize(final String text)
{
  final JLabel l = new JLabel(text);
  return l.getPreferredSize();
}

您可以将JLabel移出静态字段以进行速度优化...