How to change JTable header height?

后端 未结 6 1705
一整个雨季
一整个雨季 2020-12-29 07:51

Title explains the question. How can I easily do that?

相关标签:
6条回答
  • 2020-12-29 08:08

    enter image description here

    import java.awt.*;
    import java.awt.event.*;
    import java.util.List;
    import java.util.Arrays;
    import javax.swing.*;
    import javax.swing.table.*;
    
    public class TableHeaderHeightTest {
      private static int HEADER_HEIGHT = 32;
      private JTable makeTable() {
        JTable table = new JTable(new DefaultTableModel(2, 20));
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        return table;
      }
      public JComponent makeUI() {
        JPanel p = new JPanel(new GridLayout(2,1));
    
        JTable table1 = makeTable();
        //Bad: >>>>
        JTableHeader header = table1.getTableHeader();
        //Dimension d = header.getPreferredSize();
        //d.height = HEADER_HEIGHT;
        //header.setPreferredSize(d); //addColumn case test
        header.setPreferredSize(new Dimension(100, HEADER_HEIGHT));
        p.add(makeTitledPanel("Bad: JTableHeader#setPreferredSize(...)", new JScrollPane(table1)));
        //<<<<
    
        JTable table2 = makeTable();
        JScrollPane scroll = new JScrollPane(table2);
        scroll.setColumnHeader(new JViewport() {
          @Override public Dimension getPreferredSize() {
            Dimension d = super.getPreferredSize();
            d.height = HEADER_HEIGHT;
            return d;
          }
        });
    //         //or
    //         table2.setTableHeader(new JTableHeader(table2.getColumnModel()) {
    //             @Override public Dimension getPreferredSize() {
    //                 Dimension d = super.getPreferredSize();
    //                 d.height = HEADER_HEIGHT;
    //                 return d;
    //             }
    //         });
        p.add(makeTitledPanel("Override getPreferredSize()", scroll));
    
        final List<JTable> list = Arrays.asList(table1, table2);
    
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(p);
        panel.add(new JButton(new AbstractAction("addColumn") {
          @Override public void actionPerformed(ActionEvent e) {
            for(JTable t: list) {
              t.getColumnModel().addColumn(new TableColumn());
              JTableHeader h = t.getTableHeader();
              Dimension d = h.getPreferredSize();
              System.out.println(d);
            }
          }
        }), BorderLayout.SOUTH);
        panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
        return panel;
      }
      private static JComponent makeTitledPanel(String title, JComponent c) {
        JPanel p = new JPanel(new BorderLayout());
        p.add(c);
        p.setBorder(BorderFactory.createTitledBorder(title));
        return p;
      }
      public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
          @Override public void run() {
            createAndShowGUI();
          }
        });
      }
      public static void createAndShowGUI() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.getContentPane().add(new TableHeaderHeightTest().makeUI());
        f.setSize(320, 320);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
      }
    }
    
    0 讨论(0)
  • 2020-12-29 08:16

    Try this

    JTableHeader th = table.getTableHeader();
    th.setPreferredSize(new Dimension(100, 100));
    
    0 讨论(0)
  • 2020-12-29 08:17
    Font bigFont = new Font("sansserif", Font.PLAIN, 24); // or whatever
    myTable.getTableHeader().setFont(bigFont);
    

    This is a simple way to increase the preferredSize of the TableHeader. It will increase the height of the header, but if your column names are too long then they might not fit widthwise.

    0 讨论(0)
  • 2020-12-29 08:21

    Instead of overriding JViewport.getPreferredSize like in aterai answer you can just set preferred width.

    JScrollPane scroll = new JScrollPane(table2);
    scroll.getColumnHeader().setPreferredSize(new Dimension(0, HEADER_HEIGHT));
    

    JScrollPane ignores column header width, so you can safely set zero here.

    0 讨论(0)
  • 2020-12-29 08:24

    You can also use a very large width when setting the preferred header dimension, which swing truncate as per the required widths in the column model.

    tableHeader.setPreferredSize(new Dimension(10000, HEADER_HEIGHT));
    
    0 讨论(0)
  • 2020-12-29 08:29

    try this.....

    if jtable attached to scrollpane 
      then 
    table.getTableHeader().setPreferredSize(
         new Dimension(scrollpane.getwidth(),height)
    );
    
    else
      table.getTableHeader().setPreferredSize(
         new Dimension(width,height)
    );
    
    0 讨论(0)
提交回复
热议问题