Как изменить высоту заголовка JTable?

Название объясняет вопрос. Как я могу легко это сделать?


person Sumudu    schedule 27.07.2012    source источник


Ответы (6)


введите здесь описание изображения

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);
  }
}
person aterai    schedule 27.07.2012
comment
mKorbel спасибо :), клеопатра не использует setXXSize это точно. - person aterai; 30.07.2012
comment
@aterai Это мило, очень мило. Раньше я использовал плохой способ и столкнулся с проблемой, которую вы показали выше. На самом деле не мог понять, в чем причина .. Большое спасибо, ценю ваши усилия! - person Sumudu; 30.07.2012

попробуй это.....

if jtable attached to scrollpane 
  then 
table.getTableHeader().setPreferredSize(
     new Dimension(scrollpane.getwidth(),height)
);

else
  table.getTableHeader().setPreferredSize(
     new Dimension(width,height)
);
person Venkatesh Bandarapu    schedule 27.11.2014
comment
Если я сделаю по-вашему, то заголовок таблицы не прокручивается вместе со строками. Если я сделаю это по-атерейски, то заголовок будет прокручиваться вместе со строками. - person Jeff Holt; 09.04.2018

Font bigFont = new Font("sansserif", Font.PLAIN, 24); // or whatever
myTable.getTableHeader().setFont(bigFont);

Это простой способ увеличить предпочтительный размер заголовка таблицы. Это увеличит высоту заголовка, но если ваши имена столбцов слишком длинные, они могут не соответствовать ширине.

person bitguru    schedule 07.07.2018
comment
Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. правильное объяснение значительно улучшит его долгосрочную ценность, показав, почему это хорошее решение. к проблеме и сделает его более полезным для будущих читателей с другими подобными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения, включая сделанные вами предположения. - person Tim Diekmann; 08.07.2018

Попробуй это

JTableHeader th = table.getTableHeader();
th.setPreferredSize(new Dimension(100, 100));
person adjieq    schedule 30.05.2017

Вместо переопределения JViewport.getPreferredSize, как в ответе aterai, вы можете просто установить предпочтительную ширину.

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

JScrollPane игнорирует ширину заголовка столбца, поэтому вы можете смело устанавливать здесь ноль.

person SVlad    schedule 15.06.2018

Вы также можете использовать очень большую ширину при установке предпочтительного размера заголовка, который усекается в соответствии с требуемой шириной в модели столбца.

tableHeader.setPreferredSize(new Dimension(10000, HEADER_HEIGHT));
person Carlos    schedule 11.01.2013
comment
прочитайте ответы на этот вопрос : - person bobndrew; 06.06.2013