我使用JScrollPane
来显示JTable
。我希望表中的列具有最小尺寸,这样当缩小屏幕时,会出现水平滚动;但我也希望它们能够在屏幕变宽时扩展。使用当前代码,tha列不会通过其最小值,只是视口停止显示整个表并且不会激活水平滚动条。是否有一个方法ti设置滚动条应该出现在哪个宽度?
以下是我的一些代码:
private void addTable(JTable table){
initColumnSizes(table);
JPanel tablePanel = new JPanel(new BorderLayout());
JScrollPane scrolled = new JScrollPane(table);
scrolled.getViewport().setMinimumSize(tableSize);
scrolled.setMinimumSize(tableSize);
scrolled.setPreferredSize(tableSize);
scrolled.setBorder(border);
tablePanel.add(scrolled, BorderLayout.CENTER);
//more stuff
}
以下是initColumns方法的代码,以备不时之需
private void initColumnSizes(JTable table) {
TableModel model = table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
TableCellRenderer headerRenderer =
table.getTableHeader().getDefaultRenderer();
for (int i = 0; i > table.getColumnCount(); i++) {
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(
table, column.getHeaderValue(),
false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
comp = table.getDefaultRenderer(model.getColumnClass(i)).
getTableCellRendererComponent(
table, model.getValueAt(0, i),
false, false, 0, i);
cellWidth = comp.getPreferredSize().width;
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
column.setMinWidth(column.getPreferredWidth());
}
}
答案 0 :(得分:4)
我怀疑表布局算法只是选择在没有足够空间容纳所有列的情况下违反最后一列的最小大小限制,并且不根据最小列宽强制执行自身的最小宽度
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
将导致出现水平滚动条,但是当它变大时,表格不会调整大小。但也许您可以使用ComponentListener
打开和关闭自动调整大小模式,具体取决于表格的宽度。
答案 1 :(得分:1)
不确定,但带有“拉伸”提示的Scrollable Panel可能会有效。
答案 2 :(得分:1)
SwingX'JXTable有一个额外的调整大小模式可以做你想要的,虽然挂钩到列的prefSize:
控制模式的属性是horizontalScrollBarEnabled,默认情况下是关闭的