2010-02-11 21 views
1

J'ai eu un problème en utilisant un cadre très simple contenant deux JPanel. Le problème est sur la mise en page du Centre JPanel qui contient quatre JButton. Comment puis-je définir une meilleure taille pour les boutons ou directement pour JPanel qui utilise GridLayout. Sur l'image le problème:Comment puis-je définir une taille JPanel maximale ou préférée utilisant gridLayout?

alt http://img42.imageshack.us/img42/4601/horrible.jpg !

Voici le code: `JFrame window = new JFrame (" Horrible! LOL ");

JTextField textField = new JTextField(""); 
    textField.setPreferredSize(new Dimension(200,20)); 
    JPanel textPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); 
    textPanel.add(textField); 
    window.add(textPanel, BorderLayout.NORTH); 

    JButton plus = new JButton("+"); 
    //plus.setPreferredSize(new Dimension(50,50)); nothing would change 
    JButton minus = new JButton("-"); 
    JButton per = new JButton("x"); 
    JButton divide = new JButton("/"); 
    JPanel prova = new JPanel(new GridLayout(2,2,10,10)); 
    Dimension d = new Dimension(20,20); 
    prova.setMaximumSize(d); // nothing changed! 

    prova.add(plus); 
    prova.add(minus); 
    prova.add(per); 
    prova.add(divide); 
    window.add(prova, BorderLayout.CENTER); 

    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setSize(250,300); 
    window.setResizable(false); 
    window.setVisible(true);` 

Quelle est une bonne solution?

Amitiés

Répondre

2

Malheureusement le respect GridLayout doesent tailles préférées. Mais encore, si vous voulez en tenir à la disposition de la grille, vous pouvez essayer quelque chose comme ceci:

public static JComponent wrap(JComponent comp) 
    { 
     JPanel panel = new JPanel(); 
     panel.add(comp); 
     return panel; 
    } 

Et puis au lieu d'ajouter direclty pour prova ajouter comme ceci:

  prova.add(wrap(plus)); 
      prova.add(wrap(minus)); 
      prova.add(wrap(per)); 
      prova.add(wrap(divide)); 

Testé, fonctionne parfaitement! ! Il y a d'autres meilleures façons

+0

Merci beaucoup, cela fonctionne mais chaque bouton est en quelque sorte collé sur le bord supérieur de la grille. Est-ce mon problème? Je posterai sur une réponse mon résultat, donc vous pouvez juger. Pourriez-vous s'il vous plaît me montrer ou me donner des liens sur de meilleures solutions. Quelle serait la bonne disposition pour ce genre de choses? Cordialement – soneangel

0

C'est ce qui m'arrive: Il est définitivement attaché au bord supérieur de la grille.

alt text http://img96.imageshack.us/img96/9431/stillnot.jpg

Même si, dans ce cas, la méthode d'emballage je peux régler le preferredSize des boutons/comp, tous les boutons est sur son propre bord. Qu'en est-il des autres solutions? Comment positionneriez-vous les boutons pour une calculatrice? Cordiales salutations et merci anx!