2010-04-08 3 views
1

Pour le code suivant, je ne suis pas en mesure de définir la taille de la colonne sur une taille personnalisée. Pourquoi est-ce le cas? De plus, la première colonne n'est pas affichée.Comment modifier la largeur d'une colonne

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTable; 
import javax.swing.table.TableColumn; 

public class Trial extends JFrame{ 
    public void create(){ 
    JPanel jp = new JPanel(); 
    String[] string = {" ", "A"}; 
    Object[][] data = {{"A", "0"},{"B", "3"},{"C","5"},{"D","-"}}; 
    JTable table = new JTable(data, string);  
    jp.setLayout(new GridLayout(2,0)); 
    jp.add(table); 

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
    TableColumn column = null; 
    for (int i = 0; i < 2; i++) { 
     column = table.getColumnModel().getColumn(i); 
     column.setPreferredWidth(20);  //custom size 
     } 
    setLayout(new BorderLayout()); 
    add(jp); 
    } 

    public static void main(String [] a){ 
     Trial trial = new Trial(); 
     trial.setSize(300,300); 
     trial.setVisible(true); 
     trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE); 
     trial.create(); 
    } 
} 

Répondre

3

Vous avez quelques problèmes ici. Tout d'abord et avant tout, toujours initialiser votre JFrame de Swing EDT comme tel:

public static void main(String[] a) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      Trial trial = new Trial(); 
      trial.setSize(300, 300); 
      trial.setDefaultCloseOperation(Trial.EXIT_ON_CLOSE); 
      trial.create(); 
     } 
     }); 
    } 

faute de quoi va conduire à des erreurs subtiles. Deuxièmement: JTables aiment exister dans JScrollPanes. Voilà pourquoi vous ne voyez pas les en-têtes de colonnes:

JScrollPane pane = new JScrollPane(); 
    pane.setViewportView(table); 
    jp.add(pane); 

Avec le fait ci-dessus, je vois vos minuscules petites colonnes, chaque 20 pixels de large.

2

Lorsque le mode de réinitialisation automatique est désactivé, les largeurs de colonne ne seront pas ajustées du tout lorsque la table est disposée. De la documentation doLayout() de JTable:

AUTO_RESIZE_OFF: Ne pas automatiquement régler à toutes les largeurs de la colonne. Utilisez une barre de défilement horizontale pour accueillir les colonnes lorsque leur somme dépasse la largeur de la fenêtre. Si le JTable n'est pas inclus dans un JScrollPane, ce peut laisser des parties du tableau invisibles.

Essayez d'ajouter JTable à un JScrollPane, puis en ajoutant que le panneau.

Questions connexes