2013-01-06 2 views
1

J'ai créé JDialog simple pour obtenir des données initiales pour mon application. Les éléments (JLabel, JTextField et JButton) sont organisés par BoxLayout à l'intérieur du BorderLayout. (Code à la fin). Jusqu'à présent, il ressemble à ceci:Centrer JButton dans BoxLayout, remplissage JTextField

Current arrangement

J'ai deux problèmes:

  1. Je voudrais centrer JButton dans elle est rangée. J'ai essayé startBtn.setAlignmentX(Component.CENTER_ALIGNMENT);, mais cela ne fonctionne pas correctement, désordre apparaît. Je veux ajouter un rembourrage gauche/droite à TextField. La première solution de this topic fonctionne correctement, mais les autres éléments sont déplacés vers la gauche.

Quelqu'un peut-il donner un indice pour le placer? Je suis nouveau à Java et n'ai aucune idée.

est ici le code de ma classe InitDialog:

public class InitDialog extends JDialog { 

    JTextField dataTF; 
    JButton startBtn; 

    public InitDialog(JFrame owner) { 

     super(owner, "Rozpocznij test", Dialog.ModalityType.DOCUMENT_MODAL); 
     initUI(); 

    } 

    public final void initUI() { 

     System.out.println("InitDialog::initUI"); 

     JPanel outer = new JPanel(new BorderLayout()); 
     JPanel inner = new JPanel(); 

     outer.setBorder(new EmptyBorder(new Insets(20, 20, 20, 20))); 

     JLabel msg = new JLabel("<html>Podaj ilości liczb w zestawach testowych<br />(przedzielone średnikiem):"); 
     inner.add(msg); 
     inner.add(Box.createVerticalStrut(15)); 

     dataTF = new JTextField(); 
     dataTF.setBorder(null); 
     dataTF.setText("50; 100; 200"); 
     inner.add(dataTF); 
     inner.add(Box.createVerticalStrut(15)); 

     startBtn = new JButton("Rozpocznij test"); 
     inner.add(startBtn); 

     inner.setLayout(new BoxLayout(inner, BoxLayout.Y_AXIS)); 
     outer.add(inner); 
     add(outer); 

     setSize(300, 180); 

     //setDefaultCloseOperation(DISPOSE_ON_CLOSE); 

     addWindowListener(new WindowAdapter() { 
      @Override public void windowClosing(WindowEvent e) { 
       System.exit(0); 
      } 
     }); 

     setResizable(false); 
     setLocationRelativeTo(getRootPane()); 

    } 

} 
+0

Pour votre 1ère question avez-vous essayé 'inner.add (startBtn, BorderLayout.CENTER)' – exexzian

+0

Il n'y a pas de différence dans la mise en page puis. Merci pour l'intérêt. –

Répondre

3

alignement BoxLayout est pas ce que vous pensez qu'il est.

obtenir ce que vous voulez que c'est la ligne dont vous avez besoin

msg.setAlignmentX(Component.CENTER_ALIGNMENT); 
+1

+1 pour l'utilisation de tags de code :-) – mKorbel

Questions connexes