Alvin Sanda
Alvin Sanda

Reputation: 53

Grid layout columns and rows not working

Basically I am trying to attach two panels onto my frame, my frame uses BorderLayout and the two panels will be placed North and south. I am done with the top panel but for the bottom one I cannot get it right. I used GridLayout for the bottom one and it's supposed to look like this.

http://i47.tinypic.com/wa0lsz.png

So here is the code for the 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); 

}
}

Here is the current result of my program

http://i50.tinypic.com/107p9uu.png

Thank you in advance for your time and answers

PS : and in case you're wondering, yes, it has something to do with diablo 3 But I am not that ambitious, this is for learning purpose and won't have many functionality.

Upvotes: 1

Views: 1158

Answers (2)

Andrew Thompson
Andrew Thompson

Reputation: 168825

You might use GroupLayout1 or a nested layout2 for the bottom panels.

  1. See How to Use GroupLayout for details. E.G. enter image description here
  2. E.G.

Upvotes: 3

Emmanuel Bourg
Emmanuel Bourg

Reputation: 10988

GridLayout is a poor choice, because all cells automatically have the same size. I suggest using MigLayout instead: http://miglayout.com

The layout code would look like this:

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);

Upvotes: 3

Related Questions