java - 调整列宽后垂直滚动条消失

标签 java swing jtable

我在 scrollPane 中有一个表格。我的表中有 6 列。我希望最后两列比其他列更宽。但是当我设置列的大小后,垂直滚动条消失了。如果我注释掉重置列宽的代码,一切都会恢复正常。谁能告诉我这有什么问题吗?非常感谢!!

我复制了几个相关的尺寸:

table.setPreferredScrollableViewportSize(new Dimension(900, 500));
feedback = new JScrollPane(table);
feedback.setMinimumSize(new Dimension(900, 400));

调整列大小的代码:

TableColumn column = null;
for (int i = 0; i < 6; i++) {
    column = table.getColumnModel().getColumn(i);
    if (i == 4) {
        column.setPreferredWidth(250); //third column is bigger
    } else { 
        if (i==5) {
           column.setPreferredWidth(250);
        }
        else {
            column.setPreferredWidth(100);
        } 
    }
} 

最佳答案

我无法重现您所描述的问题。可能是你的布局有问题,或者可能需要 Setting the Scroll Bar Policy

import javax.swing.*;
import javax.swing.table.*;

public class TablePanel extends JPanel {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame("JTable");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.add(new TablePanel());
                f.pack();
                f.setVisible(true);
            }
        });
    }

    public TablePanel() {
        TableModel dataModel = new MyTableModel();
        JTable table = new JTable(dataModel);
        table.setAutoCreateRowSorter(true);
        table.getColumnModel().getColumn(0).setPreferredWidth(100);
        table.getColumnModel().getColumn(1).setPreferredWidth(150);
        table.getColumnModel().getColumn(2).setPreferredWidth(200);
        JScrollPane jsp = new JScrollPane(table);
        this.add(jsp);
    }

    private static class MyTableModel extends AbstractTableModel {

        @Override
        public int getRowCount() {
            return 30;
        }

        @Override
        public int getColumnCount() {
            return 3;
        }

        @Override
        public Object getValueAt(int row, int col) {
            return Math.pow(row, col + 1);
        }

        @Override
        public Class<?> getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
    }
}

关于java - 调整列宽后垂直滚动条消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239708/

相关文章:

JavaFX 在一段时间后隐藏节点

java - 再次调用方法时从方法覆盖传递的变量值 - Java

java - 如果字符串位于 ArrayList 中,如何查看字符串中的第四个元素?

java - SWING 组件添加到不同类的框架中

java - 在微调器外部单击时在 JSpinner 上失去焦点并提交编辑

java - 我怎样才能最快最简单地删除 RealmResults 列表中的所有项目?

java - 删除 JTable 列标识符

java - 在 FXML 中使用自定义 Swing 类

java - 我无法将 jtbable 中的数据插入数据库(netbeans 和 java 编码中的新功能)已编辑

java - JTable 行颜色取决于模型中的值?