Java 网格布局列和行不工作
基本上我试着在我的框架上安装两块面板, 我的框架使用Java 网格布局列和行不工作,java,swing,grid-layout,Java,Swing,Grid Layout,基本上我试着在我的框架上安装两块面板, 我的框架使用BorderLayout,两个面板将分别放置在北部和南部。 我已经完成了顶部面板的设计,但对于底部面板,我无法正确地完成。 我使用了GridLayout作为底部的布局,它应该是这样的 下面是gridlayout的代码 public class WeaponComp extends JPanel{ protected JPanel first = new JPanel(); public WeaponComp(){ setLay
BorderLayout
,两个面板将分别放置在北部和南部。
我已经完成了顶部面板的设计,但对于底部面板,我无法正确地完成。
我使用了GridLayout
作为底部的布局,它应该是这样的
下面是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);
}
}
这是我的程序的当前结果
提前感谢您的时间和回答
如果你想知道的话,是的,它和暗黑破坏神3有关
但我没有那么雄心勃勃,这是为了学习,不会有很多功能。GridLayout是一个糟糕的选择,因为所有单元格自动具有相同的大小。我建议改用MigLayout: 布局代码如下所示:
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);
GridLayout是一个糟糕的选择,因为所有单元格自动具有相同的大小。我建议改用MigLayout: 布局代码如下所示:
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);
底部面板可以使用1或2
+1,对于1 JPanel中的许多JComponents来说,MigLayout总是一个很好的选择。谢谢Emmanual,我会看看MigLayout,但这并不能解决我的好奇心,我认为在这种特殊情况下,3行4列的网格非常好,但它们的顺序混乱是很奇怪的,这让我非常好奇。我仍在寻找基于gridlayout的解决方案,但我仍将检查mig,再次感谢。gridlayout将看起来非常糟糕,文本字段将具有非标准高度,文本基线将不对齐。如果你真的想看到它的外观,你必须复制“ntg”空白元素,因为一个对象只能添加到一个容器中一次。我想这就是我想要的答案,ntg只能使用一次。非常感谢你的这个+1,MigLayout对于1 JPanel中的许多JComponents总是一个很好的选择。谢谢Emmanual,我会看看MIG布局,但这并不能解决我的好奇心,我认为在这种特殊情况下,3行4列的网格是完美的,但它们的顺序混乱是很奇怪的,这让我非常好奇。我仍在寻找基于gridlayout的解决方案,但我仍将检查mig,再次感谢。gridlayout将看起来非常糟糕,文本字段将具有非标准高度,文本基线将不对齐。如果你真的想看到它的样子,你必须复制“ntg”空白元素,因为一个对象只能被添加到一个容器中一次。我想这就是我想要的答案,ntg只能被使用一次。非常感谢你的帮助