如何根据JTable中的数据调整行宽?

时间:2012-10-21 01:25:42

标签: java swing jtable

我在JDialog中有一个可滚动的JTable,我希望根据数据长度自动调整行宽。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用基于JTable.setRowHeight

JTextArea方法和单元格渲染器的组合

答案 1 :(得分:0)

这取决于渲染的内容以及是否知道像素的数字......

更改列宽将受列自动调整大小策略的影响。

如果要设置像素宽度...

int columnIndex = //... the index of the column
TableColumnModel columnModel = table.getColumnModel();
TableColumn tableColumn = columnModel.getColumn(columnIndex);
tableColumn.setWidth(pixelWidth);

如果列正在渲染文本,并且您知道该列将显示的字符数,则可以获取渲染器/表的字体指标...

// If you're using a cell renderer, you will need to get the cell renderer
// to get th font metrics
FontMerics fm = table.getFontMetrics(table.getFont());
int pixelWidth = fm.stringWidth("M") * characterCount;

如果您没有使用基于文本的渲染器,则可以使用渲染器来了解宽度......

TableCellRenderer renderer = table.getCellRenderer(0, columnIndex);
// You can also use table.getDefaultRenderer(Class)
Component component = renderer.getTableCellRendererComponent(table,
                                  prototypeValue, // Some value the best represents the average value
                                  false,
                                  false,
                                  0,
                                  columnIndex);
int width = component.getPreferredWidth().width;