JTable inside JScrollPane: best height to disable scrollbars

后端 未结 3 1462
粉色の甜心
粉色の甜心 2020-12-04 00:57

I am using the following code to create JTable inside JScrollPane to show column headers

JTable won't show column headers



        
3条回答
  •  甜味超标
    2020-12-04 01:15

    converting my comments here to the answer, crazy, crazy, really crazy, everything could be complicating the simple things, by assuming that every rows have got the same size, long methods for columnmodel, expanding methods, have to add column renderer/editor, etc..

    enter image description here

    import java.awt.Dimension;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.ListSelectionModel;
    import javax.swing.SwingUtilities;
    import javax.swing.table.DefaultTableColumnModel;
    import javax.swing.table.TableColumn;
    
    public class TablePreferredSize {
    
        private String[] head = {"One", "Two", "Three", "Four", "Five", "Six"};
        private String[][] data = new String[25][6];
        private JTable table = new JTable(data, head);
        private DefaultTableColumnModel columnModel = new DefaultTableColumnModel();
        private TableColumn column = new TableColumn();
        private int rowHeight = 23;
        private int rowWidth = 0;
    
        public TablePreferredSize() {
            table.setRowHeight(23);
            table.setIntercellSpacing(new Dimension(1, 1));
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            column = new TableColumn();
            column.setModelIndex(0);
            column.setHeaderValue("One");
            column.setPreferredWidth(250);
            columnModel.addColumn(column);
            rowWidth += column.getPreferredWidth();
            column = new TableColumn();
            column.setModelIndex(1);
            column.setHeaderValue("Two");
            column.setPreferredWidth(120);
            columnModel.addColumn(column);
            rowWidth += column.getPreferredWidth();
            column = new TableColumn();
            column.setModelIndex(2);
            column.setHeaderValue("Three");
            column.setPreferredWidth(80);
            columnModel.addColumn(column);
            rowWidth += column.getPreferredWidth();
            column = new TableColumn();
            column.setModelIndex(3);
            column.setHeaderValue("Four");
            column.setPreferredWidth(120);
            columnModel.addColumn(column);
            column = new TableColumn();
            column.setModelIndex(4);
            column.setHeaderValue("Five");
            column.setPreferredWidth(70);
            columnModel.addColumn(column);
            column = new TableColumn();
            column.setModelIndex(5);
            column.setHeaderValue("Six");
            column.setPreferredWidth(30);
            columnModel.addColumn(column);
            table.setColumnModel(columnModel);
            table.setPreferredScrollableViewportSize(new Dimension(rowWidth, 12 * rowHeight));
            JScrollPane scrollPane = new JScrollPane(table);
            JFrame frame = new JFrame("Table PreferredSize");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(scrollPane);
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    TablePreferredSize t = new TablePreferredSize();
                }
            });
        }
    }
    

提交回复
热议问题