GridBagLayout не работает, когда я добавляю его в JFrame

У меня проблемы с GridBagLayout. Я создал JPanel (в данном случае он называется mainPanel), макет которого установлен на GridBagLayout. Я указал ограничения для каждой кнопки JButton и добавил ограничения для каждой кнопки. Теперь, когда я запускаю свой код, кнопки всегда находятся рядом друг с другом, независимо от значения gridx / gridy, которое я указываю в ограничениях. Кроме того, кнопки всегда находятся в центре JFrame, когда я хочу, чтобы одна кнопка отображалась вверху справа, вверху слева и на юге.

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

public class test {
public static void main (String[] args) {
    myJFrame test = new myJFrame();
    }
}

class myJFrame extends JFrame {
   public myJFrame () {
      setSize(500,500);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainPanel myPanel = new mainPanel();
      add(myPanel);

     setVisible(true);
 }
}

class mainPanel extends JPanel {
    public mainPanel(){
       setLayout(new GridBagLayout());
       GridBagConstraints c = new GridBagConstraints();

        c.anchor =      GridBagConstraints.NORTHWEST;
        c.gridx =       1000;
        c.gridy=        1;
        add(new JButton("1"),c);

        c.anchor =      GridBagConstraints.NORTHEAST;
        c.gridx =       100;
        c.gridy=        1;
        add(new JButton("2"),c);

        c.anchor =      GridBagConstraints.SOUTH;
        c.gridx =       200;
        c.gridy=        1;
        add(new JButton("3"),c);
   }
}

Это то, что я получаю, когда запускаю код


person newbieJavaDev    schedule 22.04.2016    source источник


Ответы (1)


Теперь, когда я запускаю свой код, кнопки всегда находятся рядом друг с другом, независимо от значения gridx / gridy, которое я указываю в ограничениях.

Правильно, нельзя просто указать случайные ячейки. Компонент должен находиться в каждой ячейке.

Кроме того, кнопки всегда находятся в центре JFrame,

Да, это поведение по умолчанию, если вы не укажете ограничение weightx / weighty.

Прочтите раздел руководства по Swing о Как использовать GridBagLayout для больше информации об ограничениях и рабочих примерах.

Почему вы выбираете случайные x местоположений, например 100, 200, 1000? Возможно, горизонтальный BoxLayout был бы лучшим менеджером по расположению. Вы можете добавить компоненты, а затем добавить пространство между ними:

panel.add( button1 );
panel.add( Box.createHorizonalStrut(100);
panel.add( button2 );
panel.add( Box.createHorizonalStrut(200);

Или, может быть, используйте FlowLayout и укажите «промежуток» между каждым компонентом.

person camickr    schedule 22.04.2016
comment
Спасибо! Действительно, вы правы, это была проблема с весами - как только я изменил их, я смог добиться ожидаемого поведения. Что касается местоположений x, это было просто, чтобы показать, что независимо от размера местоположения в координате x, элементы появлялись рядом друг с другом. Спасибо! - person newbieJavaDev; 23.04.2016
comment
@newbieJavaDev, рад, что помог. Не забудьте принять ответ, нажав на галочку, чтобы люди знали, что проблема решена. - person camickr; 23.04.2016