我制作了一个显示数据库的 GUI JTable。我有一个尺寸问题。
我怎样才能使 JTable 的列填充 JScrollPane,但是如果一个表中有很多列,那么它只会保持它们的默认大小并让它们滚动。
基本上..
如果其中一个 SQL 表未填充 JTable 并且不需要滚动,那么我希望将该 JTable 的列变大以便它们适合。
如果 SQL JTable 确实需要滚动,那么我只想让它保持原样,以便它需要滚动。
这是我制作 JTable 的代码:
JPanel panel1 = new JPanel();
JTable table = new JTable(){
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JScrollPane stable = new JScrollPane (table);
stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel1.add(stable);
最佳答案
要在使用新模型更新表后调用以下方法准确获取您要求的内容:
public static void tweakColumns(JTable table){
Enumeration<TableColumn> columns = table.getColumnModel().getColumns();
int required = 0;
while(columns.hasMoreElements()){
TableColumn column = columns.nextElement();
int width = (int)table.getTableHeader().getDefaultRenderer()
.getTableCellRendererComponent(table, column.getIdentifier()
, false, false, -1, column.getModelIndex()).getPreferredSize().getWidth();
required += width;
}
JViewport viewport = (JViewport)SwingUtilities.getAncestorOfClass(JViewport.class, table);
int viewportWidth = viewport.getWidth();
table.setAutoResizeMode(required<viewportWidth ? JTable.AUTO_RESIZE_ALL_COLUMNS : JTable.AUTO_RESIZE_OFF);
}
关于Java Swing 制作 JTable 列填充 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31336392/