你把GridBagLayout当成XYLayout来用了,GridBagLayout应该跟GridBagConstraints配合使用,具体见例子(来自jdk文档):
import java.awt.*;
import java.util.*;
import java.applet.Applet; public class GridBagEx1 extends Applet { protected void makebutton(String name,
GridBagLayout gridbag,
GridBagConstraints c) {
Button button = new Button(name);
gridbag.setConstraints(button, c);
add(button);
} public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 14));
setLayout(gridbag); c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
makebutton("Button1", gridbag, c);
makebutton("Button2", gridbag, c);
makebutton("Button3", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button4", gridbag, c); c.weightx = 0.0; //reset to the default
makebutton("Button5", gridbag, c); //another row c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
makebutton("Button6", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button7", gridbag, c); c.gridwidth = 1; //reset to the default
c.gridheight = 2;
c.weighty = 1.0;
makebutton("Button8", gridbag, c); c.weighty = 0.0; //reset to the default
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.gridheight = 1; //reset to the default
makebutton("Button9", gridbag, c);
makebutton("Button10", gridbag, c); setSize(300, 100);
} public static void main(String args[]) {
Frame f = new Frame("GridBag Layout Example");
GridBagEx1 ex1 = new GridBagEx1(); ex1.init(); f.add("Center", ex1);
f.pack();
f.setSize(f.getPreferredSize());
f.show();
}
}
import java.awt.*;
import java.util.*;
import java.applet.Applet; public class GridBagEx1 extends Applet { protected void makebutton(String name,
GridBagLayout gridbag,
GridBagConstraints c) {
Button button = new Button(name);
gridbag.setConstraints(button, c);
add(button);
} public void init() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints(); setFont(new Font("Helvetica", Font.PLAIN, 14));
setLayout(gridbag); c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
makebutton("Button1", gridbag, c);
makebutton("Button2", gridbag, c);
makebutton("Button3", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button4", gridbag, c); c.weightx = 0.0; //reset to the default
makebutton("Button5", gridbag, c); //another row c.gridwidth = GridBagConstraints.RELATIVE; //next-to-last in row
makebutton("Button6", gridbag, c); c.gridwidth = GridBagConstraints.REMAINDER; //end row
makebutton("Button7", gridbag, c); c.gridwidth = 1; //reset to the default
c.gridheight = 2;
c.weighty = 1.0;
makebutton("Button8", gridbag, c); c.weighty = 0.0; //reset to the default
c.gridwidth = GridBagConstraints.REMAINDER; //end row
c.gridheight = 1; //reset to the default
makebutton("Button9", gridbag, c);
makebutton("Button10", gridbag, c); setSize(300, 100);
} public static void main(String args[]) {
Frame f = new Frame("GridBag Layout Example");
GridBagEx1 ex1 = new GridBagEx1(); ex1.init(); f.add("Center", ex1);
f.pack();
f.setSize(f.getPreferredSize());
f.show();
}
}
也就是加上setLayout(new GridLayout());
你的程序运行的结果是按钮把整个屏幕填满了,但是我只是要他用前4行,剩下的地方我还好画图。
To noratong(诺拉):
按你的说法改的程序如果用.html文件直接打开,还是一行按钮出现在中间;如果用Appletviewer打开,就成了每个按钮占一列,每一列都有整个屏幕那么高,还是一行,而且全屏幕,不能留出地方画图啊。
但是编译时报错:Wrong number of arguments in method.
应该是setLayout(new GridLayout(9,100));
行数和列数的参数是传入给GridLayout的,不是给容器的.
多看一下书,讲基础的书上都有布局的介绍和用法.