2010-11-19 3 views
3

J'ai une classe qui s'étend un JPanel appelé Row. J'ai un groupe de rang ajouté à un JLabel, le code est le suivant:Définition de la taille d'un JPanel

JFrame f=new JFrame(); 

JPanel rowPanel = new JPanel(); 
//southReviewPanel.setPreferredSize(new Dimension(400,130)); 
rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
rowPanel.add(test1); 
rowPanel.add(test1); 
rowPanel.add(test2); 
rowPanel.add(test3); 
rowPanel.add(test4); 
rowPanel.setPreferredSize(new Dimension(600, 400)); 
rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 

f.setSize(new Dimension(300,600)); 

JScrollPane sp = new JScrollPane(rowPanel); 
sp.setSize(new Dimension(300,600)); 
f.add(sp); 

f.setVisible(true); 

où test1 ... etc est une ligne. Cependant, quand je redimensionne la fenêtre, la disposition de la ligne devient en quelque sorte désordonnée (elle se redimensionne aussi) ... comment puis-je empêcher cela?

Répondre

3

Lisez le tutoriel Swing sur Using Layout Managers. Chaque gestionnaire de disposition a ses propres règles sur ce qui se passe lorsque le conteneur est redimensionné. Expérimenter et jouer.

Dans le cas d'un BoxLayout il doit respecter la taille maximale des composants ajoutés au panneau de sorte que vous pouvez faire:

childPanel.setMaximumSize(childPanel.getPreferredSize()); 

Si vous avez besoin de plus d'aide après votre SSCCE montrant le problème.

+0

J'ai changé en utilisant getPreferredSize et setMaximumSize comme vous l'avez suggéré ci-dessus (voir mon code édité) ... encore, c'est parce que le code n'existe même pas. Et si j'avais une bordure? Comment puis-je définir la taille? Il ne mentionne pas à propos de BorderLayout sur le lien que vous avez donné ci-dessus – aherlambang

+0

http://download.oracle.com/javase/tutorial/uiswing/layout/border.html – Cesar

+0

Votre code édité n'est PAS un SSCCE. Oui, le lien mentionne un BorderLayout. Il n'y a aucun moyen que vous auriez pu lire toute la section en 6 minutes !!! Un gestionnaire de disposition travaille sur les composants ajoutés au panneau, pas sur le panneau lui-même. – camickr

1

Je pris le code http://download.oracle.com/javase/tutorial/uiswing/examples/layout/BoxLayoutDemoProject/src/layout/BoxLayoutDemo.java et adapté avec ce que vous essayez de faire, en utilisant uniquement des boutons au lieu de JPanels personnalisés:

public class BoxLayoutDemo { 
    public static void addComponentsToPane(Container pane) { 
     JPanel rowPanel = new JPanel(); 
     pane.add(rowPanel); 

     rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
     rowPanel.add(addAButton("Button 1")); 
     rowPanel.add(addAButton("Button 2")); 
     rowPanel.add(addAButton("Button 3")); 
     rowPanel.add(addAButton("Button 4")); 
     rowPanel.add(addAButton("5")); 
     rowPanel.setPreferredSize(new Dimension(600, 400)); 
     rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
     rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 
    } 

    private static JButton addAButton(String text) { 
     JButton button = new JButton(text); 
     button.setAlignmentX(Component.CENTER_ALIGNMENT); 
     return button; 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("BoxLayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Set up the content pane. 
     addComponentsToPane(frame.getContentPane()); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

Le résultat final est le suivant: alt text

Comme vous peut voir, la rangée de boutons est parfaitement alignée. Si vous redimensionnez le JFrame, ils restent alignés. Est-ce ce que vous cherchez?

Questions connexes