2010-09-27 6 views
2

Я новичок в Swing. Это код, который я написалпозиционирование с 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); 

    } 

Когда я запускаю программу, независимо от того, что я прохожу в качестве параметра align (GridBagConstraints.NORTH или GridBagConstraints.SOUTH и т.д ...), моя метка выравнивается в центре панели ,

Как изменить выравнивание метки?

Заранее спасибо.

ответ

0

Это потому, что JLabel является единственным компонентом в вашем графическом интерфейсе. Если вы добавите дополнительные компоненты, они будут расположены по отношению к ним в соответствии с его положением. Heres продолжение ваших прог с пустой панелью добавило:

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

эй спасибо !! –

+1

Чтобы уточнить, что сказал @DrDipShit: ваш ярлык действительно выровнен так, как вам нужно внутри вашей панели. Однако это ваша панель, которая находится внутри области содержимого JFrame. Что вы можете попробовать, так это сделать frame.setLayout (новый GridBagLayout()) и заменить панель на frame.getContentPane() повсюду. – jfpoilpret

+0

^Хорошо, попробуй, хотел бы спросить, должен ли я разместить свой компонент в левом верхнем углу, будет ли GridBagConstraints.NORTHWEST работать? –

0

по умолчанию для weightx в GridBagConstraint равен нуль, вся раскладка держатся как можно и по центру родительского компонента. Используйте ненулевой, положительный weightx, чтобы компонент использовал всю горизонтальную длину, поэтому макет будет занимать все свободное место. То же самое для weighty для вертикального направления.

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

Javadoc: weightx

+0

спасибо за ответ, попробуем это! –

Смежные вопросы