Я хочу сделать что-то вроде этого:Создание GridBagLayout выглядит в шаблон
Вот мой код:
public class MainFrame extends JFrame{
public MainFrame(){
super("Symulator Lotow");
JPanel returnPanel = new JPanel(new GridBagLayout());
add(returnPanel);
Vector<JButton> v = new Vector<JButton>();
int licznik = 0;
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
c.ipadx = 0; c.ipady = 0;
c.insets = new Insets(0,0,0,0);
c.weightx = 1.0;
c.weighty = 1.0;
c.anchor = GridBagConstraints.CENTER;
v.add(new JButton());
c.gridwidth = 6;
c.gridheight = 6;
c.gridx = 0;
c.gridy = 0;
v.get(licznik).setBackground(Color.black);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 6;
c.gridheight = 4;
c.gridx = 6;
c.gridy = 0;
v.get(licznik).setBackground(Color.white);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 3;
c.gridheight = 2;
c.gridx = 6;
c.gridy = 4;
v.get(licznik).setBackground(Color.blue);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 3;
c.gridheight = 2;
c.gridx = 9;
c.gridy = 4;
v.get(licznik).setBackground(Color.yellow);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 6;
c.gridheight = 2;
c.gridx = 0;
c.gridy = 6;
v.get(licznik).setBackground(Color.yellow);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 6;
c.gridheight = 2;
c.gridx = 6;
c.gridy = 6;
v.get(licznik).setBackground(Color.yellow);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 4;
c.gridheight = 2;
c.gridx = 0;
c.gridy = 8;
v.get(licznik).setBackground(Color.red);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 4;
c.gridheight = 2;
c.gridx = 4;
c.gridy = 8;
v.get(licznik).setBackground(Color.red);
returnPanel.add(v.get(licznik),c);
licznik++;
v.add(new JButton());
c.gridwidth = 4;
c.gridheight = 2;
c.gridx = 8;
c.gridy = 8;
v.get(licznik).setBackground(Color.red);
returnPanel.add(v.get(licznik),c);
licznik++;
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new MainFrame();
}
}
Как можно видеть, когда мой код выполняется, это Безразлично «Я выгляжу как в шаблоне. Цвета - это просто образцы, поэтому я не забочусь о них. Я просто хочу, чтобы относительные размеры кнопок были правильными. Где моя ошибка?
Проблема с weightx/веским является то, что они относятся к «дополнительному пространству» после того, как предпочтительная пространство каждому компонента была выделена. Поэтому, если все компоненты имеют предпочтительный размер (0, 0), то отношение не будет точным. – camickr
@camickr. Установка предпочтительного размера в 0,0 не должна быть проблемой, поскольку вы всегда указываете заполнение как ОБО. –
Я попробовал ур совета @MadPhysicist, однако, как @camickr выяснить, соотношение кнопок не точно, как я хотел. Я попробовал 'setPrefferedSize (новый размер (0,0))' для всех моих кнопок, но он все еще не работает, какие-то идеи почему? – fa1thly