2015-04-27 8 views
1

Я использую GridBagLayout, и я хочу разместить JLabel и текстовое поле в левом верхнем углу моего JPanel. Я знаю, что этот вопрос, возможно, был бы дубликат, но я не мог найти тот, который мог бы объяснить, почему мой код оказался центрированным.Размещение JLabel в верхнем левом углу GridBagLayout

JLabel user = new JLabel(ss[0]); 
    JLabel av = new JLabel(ss[1]); 
    JTextField ufield = new JTextField(""); 

    user.setBorder(BorderFactory.createLineBorder(Color.black)); 
    av.setBorder(BorderFactory.createLineBorder(Color.black)); 
    ufield.setBorder(BorderFactory.createLineBorder(Color.black)); 

    //User Label 
    c.anchor = GridBagConstraints.NORTHWEST; 
    c.gridx = 0; 
    c.gridy = 0; 
    c.weightx = 1; 
    c.insets = new Insets(2, 0, 0, 2); 
    p.add(user, c); 

    //User TextField 
    c.fill = GridBagConstraints.BOTH; 
    c.gridx = 1; 
    c.gridy = 0; 
    c.gridwidth = 5; 
    c.gridheight = 1; 
    c.weightx = 2; 
    c.insets = new Insets(5, 1, 1, 5); 
    p.add(ufield, c); 

    //Available Label 
    c.fill = GridBagConstraints.NORTHWEST; 
    c.gridx = 0; 
    c.gridy = 1; 
    c.gridwidth = 1; 
    c.gridheight = 1; 
    c.weightx = 1; 
    c.insets = new Insets(5, 1, 1, 5); 
    p.add(av, c); 

    f.repaint(); 
    f.revalidate(); 

Это заканчивает тем, как это: enter image description here

Я хочу, чтобы быть в верхней, а не в центре

+0

Я думаю, один из ваших компонентов должно занимать вертикальное доступное пространство, GridBagConstraints.weighty установлен в 1, то вы можете использовать либо GridBagConstraints.anchor установлен NORTH_EAST , предполагая, что метка находится в ячейке с большим пространством или отрегулирует свойство GridBagConistraints.fill и метки вертикального/горизонтального выравнивания – MadProgrammer

ответ

2

JLabel и TextField являются фактически выровнены в левом верхнем углу JPanel, однако, JPanel не находится в левом верхнем углу JFrame (который, как я предполагаю, является переменной f), поэтому в целом он кажется центрированным, а не левым верхним.

Вы должны управлять компоновкой JFrame при добавлении JPanel к нему. Вы можете сделать это с помощью BorderLayout как:

f.getContentPane().setLayout(new BorderLayout()); 
f.add(p, BorderLayout.PAGE_START); 
Смежные вопросы