2011-11-30 7 views
1

J'ai une question.Mise en page grille Java et JPanel

J'ai le programme suivant et j'ai des problèmes avec une chose. J'ai créé une grille, et j'utilise JPanel pour entrer des boutons et du texte dans la grille, mais tout semble changer de taille si mon texte est très long. Quelqu'un peut-il m'aider avec comment je peux empêcher que cela se produise?

Ceci est mon code:

package JFrameTester; 

import java.awt.*; 
import javax.swing.*; 



public class JFrameTester { 


public JPanel createContentPane(){ 

     JPanel panel = new JPanel(); 
     JButton button1,button2,button3,button4; 

     JPanel mainPanel = new JPanel(new GridLayout(2, 0, 40, 10)); 

     //JPanel red = createSquareJPanel(Color.red, 50); 
     button1 = new JButton ("button1"); 
     button2 = new JButton ("button2"); 
     button3 = new JButton ("button3"); 
     button4 = new JButton ("button4"); 
     Label one = new Label("Rohihtjthjhtjghjghmgfjgjghjghj"); 
     //add(button1); 


     mainPanel.add(button1); 
     mainPanel.add(one); 
     mainPanel.add(button2); 
     mainPanel.add(button3); 
     mainPanel.add(button4); 


     panel.add(mainPanel); 
     panel.setOpaque(true); 
     return panel; 
    } 


    public static void main(String[] args) { 

     JFrame frame = new JFrame("GridLayout"); 
     JFrameTester Display = new JFrameTester(); 
     frame.setContentPane(Display.createContentPane()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 


} 
} 

Répondre

4

C'est ce que les gestionnaires font layout; ils allouent suffisamment d'espace pour chaque composant. Vous pouvez essayer d'incorporer du code HTML dans l'instance JLabel afin de l'emballer. Sinon, vous allez devoir vivre avec.

Il est également important de noter qu'une instance JPanel est opaque par défaut.

1

Eh bien ... les premières choses d'abord. Vous déclarez GridLayout sur 2 lignes, 0 colonnes. Est-ce exactement ce que vous voulez? Je ne pense pas.

La partie suivante est l'endroit où vous ajoutez du contenu. La grille est généralement maintenue à une taille dynamique. Il va réduire les cellules à la plus petite valeur possible. Mais quand certains contenus deviennent plus gros (grand jPanels du texte) il développera la cellule.

Selon le contenu de la cellule, ils resteront statiques ou tenteront de remplir tout l'espace disponible. Si je lis votre question correctement, ce que vous voulez faire est de définir une taille statique pour votre JButtons en utilisant les fonctions JComponentsSee JavaDoc link here. Vous voudrez probablement utiliser setMaximumSize(new Dimension(width,height)); pour chaque bouton.

Est-ce logique?

Sur une note de côté. Si vous voulez plus de contrôle sur votre mise en page, essayez d'utiliser un GrabBagLayout. Plus de travail, mais plus de contrôle.

+2

Si @Led K définit la taille maximale de l'instance 'JLabel' (qui est le composant en lui donnant la douleur), une partie de son texte sera manquant. – mre

+1

Cela ne devrait-il pas être 'GridBagLayout'? –

+0

ne peut toujours pas le faire fonctionner :) – Led

0

Ceci est un post plus ancien mais j'ai juste trébuché sur ce sujet, tout en cherchant le même problème. L'utilisation de frame.pack() est utilisée pour déplacer tout autour de la taille de panneau donnée. Donc, si vous augmentez la taille d'une chose, d'autres choses se rétrécissent et se déplacent pour s'adapter au panneau.

source: http://www.macs.hw.ac.uk/guidebook/?name=JFrame&page=2