Question

titre explique la question.Comment puis-je le faire facilement?

Était-ce utile?

La solution

Entrez la description de l'image ici

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);
  }
}

Autres conseils

Essayez ceci .....

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

else
  table.getTableHeader().setPreferredSize(
     new Dimension(width,height)
);

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

Ceci est un moyen simple d'augmenter la préférence de la tête de table.Il augmentera la hauteur de l'en-tête, mais si vos noms de colonne sont trop longs, ils ne peuvent pas s'adapter à la largeur.

Essayez ceci

JTableHeader th = table.getTableHeader();
th.setPreferredSize(new Dimension(100, 100));

au lieu de remplacer Jvienplport.gepreferredSize comme dans Aterai Répondre, vous pouvez simplement définir la largeur préférée.

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

JScrollPane ignore la largeur d'en-tête de la colonne, de sorte que vous pouvez définir en toute sécurité zéro ici.

Vous pouvez également utiliser une très grande largeur lors de la réglage de la dimension d'en-tête préférée, qui pivote tronquée selon les largeurs requises du modèle de colonne.

tableHeader.setPreferredSize(new Dimension(10000, HEADER_HEIGHT));

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top