package notebook;
import java.awt.*;
class Layout extends Frame {//加不加public有什么区别?
public Layout(String title) {
GridBagLayout layout = new GridBagLayout();//网格包布局方式对象
GridBagConstraints c = new GridBagConstraints();//布局约束
this.setLayout(layout);
c.fill = GridBagConstraints.BOTH;//撑满屏幕
c.weightx = 1;//宽的权重
c.weighty = 1;
this.addComponent("btn1", layout, c);
this.addComponent("btn2", layout, c);
this.addComponent("btn3", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER;//下一个是“本行”最后一个元素
this.addComponent("btn4", layout, c);//这里和第36行不加this有什么区别?
c.weightx = 0;
c.weighty = 0;
addComponent("btn5", layout, c);
c.gridwidth = 1;//宽只占用一个网格
this.addComponent("btn6", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER;
this.addComponent("btn7", layout, c);
c.gridheight = 2;//高占用两个网格
c.gridwidth = 1;
c.weightx = 2;
c.weighty = 2;
this.addComponent("btn8", layout, c);
c.gridwidth = GridBagConstraints.REMAINDER;
c.gridheight = 1;
this.addComponent("btn9", layout, c);
this.addComponent("btn10", layout, c);
this.setTitle(title);
this.pack();
this.setVisible(true);
}
public void addComponent(String name, GridBagLayout layout, GridBagConstraints c) {
Button button = new Button(name);//创建一个按钮(空间)对象
layout.setConstraints(button, c);//绑定控件和约束
this.add(button);//为什么调用layout的add方法要实例化layout this直接代表了一个实例化对象,这个对象就是调用当前方法的类
//Layout不是一个类嘛?为什么说它是当前正在构建的对象呢?
//通过this调用add方法就不用实例化呢? 也就是说this会帮你自动实例化对象而不需要new
//实例化是不是就意味着创建对象呢? 是的
}
}
public class FileUtil {
public static void main(String[] args) {
new Layout("GridBagLayout");
}
}
介绍了java.awt 网格包布局方式(最复杂、最灵活的布局方式)
最新推荐文章于 2024-05-03 16:12:22 发布