Java 调整列宽后,垂直滚动条消失

Java 调整列宽后,垂直滚动条消失,java,swing,jtable,Java,Swing,Jtable,我在滚动窗格中有一个表。我的表中有6列。我希望最后两列比其他列宽。但是在我设置了列的大小之后,垂直滚动条消失了。如果我注释掉重置列宽的代码,一切都会恢复正常。谁能告诉我这有什么问题吗?非常感谢 我复制了几个相关的维度: table.setPreferredScrollableViewportSize(new Dimension(900, 500)); feedback = new JScrollPane(table); feedback.setMinimumSize(new Dimension(

我在
滚动窗格中有一个表。我的表中有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);
        } 
    }
} 
TableColumn=null;
对于(int i=0;i<6;i++){
column=table.getColumnModel().getColumn(i);
如果(i==4){
column.setPreferredWidth(250);//第三列更大
}否则{
如果(i==5){
列。设置首选宽度(250);
}
否则{
列。设置首选宽度(100);
} 
}
} 

我无法重现您描述的问题。您的布局可能有问题,或者可能需要

import javax.swing.*;
导入javax.swing.table.*;
公共类TablePanel扩展了JPanel{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame f=新的JFrame(“JTable”);
f、 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f、 添加(新的TablePanel());
f、 包装();
f、 setVisible(真);
}
});
}
公共事务委员会(){
TableModel dataModel=新的MyTableModel();
JTable table=新的JTable(数据模型);
表.setAutoCreateRowSorter(真);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(150);
table.getColumnModel().getColumn(2).setPreferredWidth(200);
JScrollPane jsp=新的JScrollPane(表);
add(jsp);
}
私有静态类MyTableModel扩展了AbstractTableModel{
@凌驾
public int getRowCount(){
返回30;
}
@凌驾
public int getColumnCount(){
返回3;
}
@凌驾
公共对象getValueAt(整数行,整数列){
返回Math.pow(行、列+1);
}
@凌驾
公共类getColumnClass(int-col){
返回getValueAt(0,col).getClass();
}
}
}
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();
        }
    }
}