2010-09-27 6 views
2

Je suis nouveau à Swing. Voici le code que j'ai écritpositionnement avec Java Swing

import java.awt.*; 
import javax.swing.*; 
public class NewMain { 
    public static void main(String[] args) { 
     // TODO code application logic here 
     JFrame frame = new JFrame("test"); 
     frame.setVisible(true); 
     frame.setSize(300,300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 
     addItem(panel, new JLabel("Label"), 0, 0, GridBagConstraints.EAST); 
     frame.add(panel); 
    } 

    private static void addItem(JPanel p, JComponent gc, int i, int i0, int align) { 
     GridBagConstraints c = new GridBagConstraints(); 
     c.insets = new Insets(5,5,5,5); 
     c.gridx = i; 
     c.gridy = i0; 
     c.anchor = align; 
     p.add(gc,c); 

    } 

Quand je lance le programme, quel que soit ce que je passe comme paramètre align (etc ... GridBagConstraints.NORTH ou GridBagConstraints.SOUTH), mon label est aligné au centre du panneau .

Comment modifier l'alignement de l'étiquette?

Merci d'avance.

Répondre

0

Ceci est dû au fait que JLabel est le seul composant de votre interface graphique. Si vous ajoutez plus de composants, ils seront disposés par rapport à eux en fonction de leur position. Heres une extension de votre prog avec un panneau vide ajouté:

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


public class NewMain { 

    public static void main(String[] args) { 
     // TODO code application logic here 
     JFrame frame = new JFrame("test"); 
     frame.setVisible(true); 
     frame.setSize(300,300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new JPanel(); 
     panel.setLayout(new GridBagLayout()); 

     JPanel emptyArea = new JPanel(); 
     emptyArea.setPreferredSize(new Dimension(200, 200)); 
     addItem(panel, new JLabel("Label"), 0, 0, GridBagConstraints.WEST); 
     addItem(panel, emptyArea, 0, 0, GridBagConstraints.CENTER); 
     frame.add(panel); 
    } 

    private static void addItem(JPanel p, JComponent gc, int i, int i0, int align) { 
     GridBagConstraints c = new GridBagConstraints(); 
     c.insets = new Insets(5,5,5,5); 
     c.gridx = i; 
     c.gridy = i0; 
     c.anchor = align; 
     p.add(gc,c); 

    } 
} 
+0

hey Merci beaucoup !! –

+1

Pour clarifier ce que dit @DrDipShit: votre étiquette est vraiment alignée comme vous l'avez souhaité dans votre panneau. Cependant, ceci est votre panneau qui est centré dans le volet de contenu JFrame. Ce que vous pouvez essayer est de faire frame.setLayout (new GridBagLayout()) et de remplacer le panneau par frame.getContentPane() partout. – jfpoilpret

+0

^okay va essayer cela, voulait aussi demander, si je dois placer mon composant en haut à gauche, GridBagConstraints.NORTHWEST fonctionnera-t-il? –

0

comme valeur par défaut pour weightx dans le GridBagConstraint est égal à zéro, la mise en page entière est aussi faible que possible et centré sur le composant parent. Utilisez un weightx positif non nul pour que le composant utilise toute la longueur horizontale, de sorte que la disposition occupe tout l'espace disponible. Idem pour weighty pour la direction verticale.

... 
c.anchor = align; 
c.weightx = 1.0: 
... 

Javadoc: weightx

+0

merci pour la réponse, va essayer ça! –