2010-07-27 11 views
3

Ce code met un JTable dans un JFrame (composant unique de l'interface utilisateur entière):Comment puis-je empêcher le redimensionnement des colonnes d'un JTable lorsque je redimensionne le JFrame?

JFrame frame = new JFrame("Title"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    JTable table = appender.createTable(); 
    JScrollPane scrollPane = new JScrollPane(table); 
    table.setFillsViewportHeight(true); 
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER); 

    frame.pack(); 
    frame.setVisible(true); 

J'ai aussi un code pour définir la taille préférée des colonnes.

Rien de spécial. Lorsque l'interface utilisateur s'ouvre, la table occupe toute la vue et je n'ai pas de barre de défilement. Les largeurs préférées combinées des colonnes nécessitent plus d'espace horizontal que les fenêtres sont larges. Malgré cela, il n'y a pas de barre de défilement horizontale et les colonnes sont trop étroites.

Que dois-je faire

  1. Les colonnes sont encore redimensionnable par l'utilisateur
  2. La largeur actuelle est respectée? C'est à dire. quand je change la largeur d'une colonne, la largeur des autres colonnes ne devrait pas changer.

Répondre

3
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

Vous pouvez également ajouter le scrollpane contenant la table à un JPanel puis ajoutez le panneau au cadre. De cette façon, le panneau va changer de taille, pas le scrollpane.

+2

Avoir vu la question, attendu une réponse rapide de quelqu'un, et la fin de la journée me rend trop lent à rivaliser avec ça. Je vais juste ajouter ce lien au [tutoriel swing] (http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/uiswing/components/table.html#width) et au [javadoc correspondant ] (http://tinyurl.com/2emgeb3) – Gnoupi

+0

Quel est l'avantage d'ajouter un JPanel intermédiaire? Je ne vois aucune différence dans le comportement de la colonne, de la table, du scrollpane ou du cadre. – bobndrew

+0

Je pensais avoir lu quelque chose à propos de vous voulant garder la taille totale de la table constante (mais je me trompais probablement). Quoi qu'il en soit, lorsque vous ajoutez le panneau de défilement à un cadre à l'aide d'un BorderLayout, la taille du panneau de défilement change à mesure que la taille du cadre change. Cependant, vous ajoutez d'abord le scrollpane à un panneau (qui utilise par défaut un FlowLayout), la taille de la table sera respectée. Si vous ajoutez dix fois ce panneau au cadre, alors que vous redimensionnez le cadre, le panneau changera de taille, mais la taille de la table ne changera pas. – camickr