我正在使用 JScrollPane
来显示 JTable
。我希望表格中的列具有最小大小,以便在缩小屏幕时出现水平滚动;但我也希望它们能够在屏幕变宽时扩展。使用当前代码,列不会通过它们的最小值,只是视口(viewport)停止显示整个表格并且不会激活水平滚动条。是否有一种方法可以设置滚动条的显示宽度?
这是我的一些代码:
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());
}
}
最佳答案
我怀疑当没有足够的空间容纳所有列时,表格布局算法只是选择违反最后一列的最小大小限制,而不是根据最小列宽为自己强制执行最小宽度.
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
会导致出现水平滚动条,但当表格变大时表格不会调整大小。但也许您可以使用 ComponentListener
根据表格的宽度打开和关闭自动调整大小模式。
关于java - JScrollPane 上的单杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968355/