JTable水平滚动时表头与数据不一致的解决

    JTable 设置setAutoResizeMode(JTable.AUTO_RESIZE_OFF);时才能保证水平滚动条的存在,

但是仅有该设置,水平滚动时表头和表数据不能保持垂直对齐。

   解决方法:  设置表头的preferredSize.

        this.table.getTableHeader().setPreferredSize(
            new Dimension(this.table.getTableHeader().getPreferredSize().width, 30));
        //this.table.updateUI();

   例如:

   参考资料:http://bbs.csdn.net/topics/240039168

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class TableInsertTest extends JFrame {
    private JTable table = new JTable();
    public TableInsertTest() 
    {
        TableModel dataModel = new DefaultTableModel() 
        {
            public int getColumnCount() 
            {
                return 10000;
            }
            public int getRowCount() 
            {
                return 10;
            }
            @Override
            public Object getValueAt(int row, int column) 
            {
                return row * column;
            }
        };
        this.table = new JTable(dataModel);
        
        //关键代码
        //使得jtable有水平滚动条
        this.table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        //使得水平滚动时表头和数据可以保持一致
        this.table.getTableHeader().setPreferredSize(
            new Dimension(this.table.getTableHeader().getPreferredSize().width, 30));
        this.table.updateUI();
        
        JScrollPane scrollpane = new JScrollPane(this.table);
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(scrollpane, BorderLayout.CENTER);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        TableInsertTest frame = new TableInsertTest();
        frame.setVisible(true);
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}


另有情况:

如果以上方法不起效,可以尝试吧表头的宽度设置为一个很大的数。

dataTable.getTableHeader().setPreferredSize(new Dimension(10000,headHeight));

把表头的宽度设为一个很大的数就可以了。


你可能感兴趣的:(JTable水平滚动时表头与数据不一致的解决)