Не работают столбцы и строки сетки
В основном я пытаюсь прикрепить две панели к моей раме, моя рамка использует BorderLayout
и две панели будут размещены с севера и юга. Я сделал с верхней панелью, но для нижней я не могу сделать это правильно. я использовал GridLayout
для нижнего, и он должен выглядеть следующим образом.
Так вот код для сетки
public class WeaponComp extends JPanel{
protected JPanel first = new JPanel();
public WeaponComp(){
setLayout(new GridBagLayout());
setPreferredSize(new Dimension(800,550));
GridBagConstraints c = new GridBagConstraints();
JLabel ntg = new JLabel("");
JLabel oldweap = new JLabel("OLD WEAPON");
JLabel newweap = new JLabel("NEW WEAPON");
JLabel onetwohand = new JLabel ("1H / 2H");
JLabel offhand = new JLabel ("Off Hand");
JLabel dps = new JLabel ("DPS :");
JLabel str = new JLabel ("Str :");
JLabel dex = new JLabel ("Dex :");
JLabel vit = new JLabel ("Vit :");
JLabel intel = new JLabel ("Int :");
JLabel manareg = new JLabel ("Mana Regen :");
JLabel aspd = new JLabel ("Attack Speed:");
JLabel critch = new JLabel ("Crit chance:");
JLabel critdmg = new JLabel ("Crit damage:");
JTextField dpstf = new JTextField(12);
JTextField strtf = new JTextField(5);
JTextField dextf = new JTextField(5);
JTextField vittf = new JTextField(5);
JTextField inteltf = new JTextField(5);
JTextField manaregtf = new JTextField(3);
JTextField aspdtf = new JTextField(3);
JTextField critchtf = new JTextField(3);
JTextField critdmgtf = new JTextField(3);
JTextField offdpstf = new JTextField(12);
JTextField offstrtf = new JTextField(5);
JTextField offdextf = new JTextField(5);
JTextField offvittf = new JTextField(5);
JTextField offinteltf = new JTextField(5);
JTextField offmanaregtf = new JTextField(3);
JTextField offaspdtf = new JTextField(3);
JTextField offcritchtf = new JTextField(3);
JTextField offcritdmgtf = new JTextField(3);
first.setLayout(new GridLayout(3,4));
first.setPreferredSize(new Dimension(750,150));
first.add(oldweap); first.add(ntg); first.add(newweap); first.add(ntg);
first.add(onetwohand); first.add(ntg); first.add(offhand); first.add(ntg);
first.add(dps); first.add(dpstf); first.add(dps); first.add(offdpstf);
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0; c.gridy = 0;
add (first,c);
}
}
Вот текущий результат моей программы
Заранее спасибо за ваше время и ответы
PS: и если вам интересно, да, это как-то связано с Diablo 3 Но я не настолько амбициозен, это для целей обучения и не будет иметь много функциональности.
2 ответа
GridLayout - плохой выбор, потому что все ячейки автоматически имеют одинаковый размер. Я предлагаю вместо этого использовать MigLayout: http://miglayout.com/
Код макета будет выглядеть так:
first.setLayout(new MigLayout("wrap 2, fill"));
first.add(oldweap);
first.add(newweap);
first.add(onetwohand);
first.add(offhand);
first.add(dps);
first.add(dpstf);
first.add(dps);
first.add(offdpstf);
Вы могли бы использовать GroupLayout
1 или вложенная раскладка 2 для нижних панелей.
- См. Как использовать GroupLayout для деталей. НАПРИМЕР
- НАПРИМЕР