import java.awt.*;import java.awt.event.*;import java.util.List;import java.util.Arrays;import javax.swing.*;import javax.swing.table.*;publicclassTableHeaderHeightTest{privatestaticint HEADER_HEIGHT =32;privateJTable makeTable(){JTable table =newJTable(newDefaultTableModel(2,20));
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);return table;}publicJComponent makeUI(){JPanel p =newJPanel(newGridLayout(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(newDimension(100, HEADER_HEIGHT));
p.add(makeTitledPanel("Bad: JTableHeader#setPreferredSize(...)",newJScrollPane(table1)));//<<<<JTable table2 = makeTable();JScrollPane scroll =newJScrollPane(table2);
scroll.setColumnHeader(newJViewport(){@OverridepublicDimension 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));finalList<JTable> list =Arrays.asList(table1, table2);JPanel panel =newJPanel(newBorderLayout());
panel.add(p);
panel.add(newJButton(newAbstractAction("addColumn"){@Overridepublicvoid actionPerformed(ActionEvent e){for(JTable t: list){
t.getColumnModel().addColumn(newTableColumn());JTableHeader h = t.getTableHeader();Dimension d = h.getPreferredSize();System.out.println(d);}}}),BorderLayout.SOUTH);
panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));return panel;}privatestaticJComponent makeTitledPanel(String title,JComponent c){JPanel p =newJPanel(newBorderLayout());
p.add(c);
p.setBorder(BorderFactory.createTitledBorder(title));return p;}publicstaticvoid main(String[] args){EventQueue.invokeLater(newRunnable(){@Overridepublicvoid run(){
createAndShowGUI();}});}publicstaticvoid createAndShowGUI(){JFrame f =newJFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(newTableHeaderHeightTest().makeUI());
f.setSize(320,320);
f.setLocationRelativeTo(null);
f.setVisible(true);}}
1
de l'essayer.....
if jtable attached to scrollpane
then
table.getTableHeader().setPreferredSize(newDimension(scrollpane.getwidth(),height));else
table.getTableHeader().setPreferredSize(newDimension(width,height));
JScrollPane ignore en-tête de colonne largeur, de sorte que vous pouvez en toute sécurité à zéro ici.
0
Font bigFont =newFont("sansserif",Font.PLAIN,24);//or whatever
myTable.getTableHeader().setFont(bigFont);
C'est une manière simple d'augmenter la preferredSize de la TableHeader. Il permettra d'augmenter la hauteur de la tête, mais si vos noms de colonne sont trop longtemps, alors qu'ils peuvent ne pas entrer dans le sens de la largeur.
-1
Vous pouvez également utiliser une très grande largeur lors du réglage de l'privilégiées en-tête de dimension, ce qui swing tronquer selon exigé largeurs dans la colonne modèle.
de l'essayer.....
Essayer cette
Au lieu de l'annulation de la JViewport.getPreferredSize comme dans aterai réponse permet de définir la largeur préférée.
JScrollPane ignore en-tête de colonne largeur, de sorte que vous pouvez en toute sécurité à zéro ici.
C'est une manière simple d'augmenter la preferredSize de la TableHeader. Il permettra d'augmenter la hauteur de la tête, mais si vos noms de colonne sont trop longtemps, alors qu'ils peuvent ne pas entrer dans le sens de la largeur.
Vous pouvez également utiliser une très grande largeur lors du réglage de l'privilégiées en-tête de dimension, ce qui swing tronquer selon exigé largeurs dans la colonne modèle.