Java Swing 制作 JTable 列填充 JScrollPane

标签 java swing jtable jscrollpane

我制作了一个显示数据库的 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/

相关文章:

java - jtable 到图像的转换未正确发生

java - 按某些键值删除重复项

java - 如何在 Java 中使用 JFileChooser 保存文件?

javascript - jTable 条件显示\隐藏基于数据所有者的编辑和删除按钮

java - 比较两个或多个 JTables 和 'Highlight' 差异

java - Swing 中的增量图形

java - 搜索二维矩阵内的最大区域

java - JNI CallObjectMethod 搞砸了堆栈框架?

java - java中获取ResultTable[]的第一个元素

Java Event-Dispatching Thread 解释