我正在尝试使用GridBagLayout
,但是得到的结果与我的预期不符,而且我在这段代码中也找不到错误:
public class GridBagEx1 extends JPanel {
private static final long serialVersionUID = 1L;
protected void makebutton(String name, GridBagLayout gridbag, GridBagConstraints c) {
JButton button = new JButton(name);
gridbag.setConstraints(button, c);
add(button);
}
public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
setLayout(gridbag);
c.fill = BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
c.anchor = CENTER;
c.insets.top = 5;
c.insets.bottom = 5;
c.insets.left = 5;
c.insets.right = 5;
c.gridx = 0;
c.gridy = 0;
c.gridheight = 1;
c.gridwidth = 2;
makebutton("Button1", gridbag, c);
c.gridx = 2;
c.gridy = 0;
c.gridheight = 1;
c.gridwidth = 1;
makebutton("Button2", gridbag, c);
c.gridx = 3;
c.gridy = 0;
c.gridheight = 2;
c.gridwidth = 2;
makebutton("Button3", gridbag, c);
c.gridx = 0;
c.gridy = 1;
c.gridheight = 1;
c.gridwidth = 1;
makebutton("Button4", gridbag, c);
c.gridx = 1;
c.gridy = 1;
c.gridheight = 1;
c.gridwidth = 2;
makebutton("Button5", gridbag, c);
c.gridx = 0;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
makebutton("Button6", gridbag, c);
c.gridx = 1;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 2;
makebutton("Button7", gridbag, c);
c.gridx = 3;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
makebutton("Button8", gridbag, c);
c.gridx = 4;
c.gridy = 2;
c.gridheight = 1;
c.gridwidth = 1;
makebutton("Button9", gridbag, c);
}
public static void main(String args[]) {
JFrame frame = new JFrame();
GridBagEx1 ex1 = new GridBagEx1();
ex1.init();
frame.add(ex1);
frame.pack();
frame.setVisible(true);
}
}
这张图片展示了我需要的内容:
黄色是按钮名称,红色是行和列。
这是实际发生的情况:
有人能解释一下我的代码出了什么问题吗?
c.fill = BOTH;
应改为c.fill = GridBagConstraints.BOTH;
,同样地,c.anchor = CENTER;
也需要修改为能够编译的代码。 - user1803551import static java.awt.GridBagConstraints.*;
就不需要了 :-) - Gerold BroserGroupLayout
吗? :) - user1803551