java布局学习 (二)
2016-01-03 21:48
423 查看
前文中介绍了FlowLayout和BorderLayout 本文我们将会继续介绍java中的布局方式
(3)GridLayout 网格布局
这种布局会将整个容器划分成M行*N列的网格。
如下图:
由模型图我们可以知道这种布局,类似于我们常见的扫雷、计算器等软件的布局。
这种布局的构造函数有三种
在向这种容器中添加控件时,会以向左后右,先上后下的顺序添加(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )控件。 而不能在指定的位置中添加控件,换言之控件之间不能留有空白。 下面我们来看代码
显示效果如下图
(4)GridBagLayout
GridBagLayout也是一种表格,但是可以通过设定规则更自由的将控件绑定到容器上:
如下图:
将容器切割为若干个小的格子Cell,然后向这些Cell中添加控件,同时可以在某一个(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )方向上连续的几个Cell进行拼接,组成一个大的Cell放置控件。
操作步骤如下:
(1)new GridBagLayout() 设置到指定容器上。
(2)GridBagConstraint gbc 新增这样的一个容器规则。(注意Constraint是规则、约束、条件的意思)
设定的参数规则如下
gridx gridy 索引
gridwidth gridheight 跨越的索引
fill 是否动态扩充
weightx、weighty 扩大的权重
(3)gb.setConstraints(控件,gbc) 将控件和规则绑定起来
(4)constainer.add(c) 添加容器,然后将控件添加到容器上。
同时gbc 可以重用,反复的设定骨子额,绑定规则,添加容器
重复 2、3、4步
请参照 如下代码 ,重点注意 addComponent()方法:
ps 此代码来自http://blog.sina.com.cn/s/blog_6cea57330100pwvq.html
这里有几点要注意的
(1)控制动态扩充的fill参数,有四个值分别为 水平扩充、垂直扩充、水平垂直扩充、不扩充。大家根据自己的实际情况来选择
(2)weightx、weighty 是扩大的权重,这个权重表示的是,当横向(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )或纵向扩大N的倍数后,那么他占的比重是多少。这里要小心,就是权重大的话,如果往大拖容器size,那么这个控件增长的快,同时当size变小时,权重大的也缩小的更快。所以如果要想让权重大的控件始终大时,需要将几个控件的初始size设定的非常小,这样所有的控件都是在拖大的状态了。
(3)GridLayout 网格布局
这种布局会将整个容器划分成M行*N列的网格。
如下图:
这种布局的构造函数有三种
GridLayout() //一行一列 GridLayout(int rows, int cols) GridLayout(int rows, int cols, int hgap, int vgap)//hgap 水平间距, vgap垂直间距
在向这种容器中添加控件时,会以向左后右,先上后下的顺序添加(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )控件。 而不能在指定的位置中添加控件,换言之控件之间不能留有空白。 下面我们来看代码
import java.awt.*; import javax.swing.*; class GridFrame extends JFrame { JPanel panel=new JPanel(new GridLayout(4,4,3,3));//构造指定布局的容器 String str[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; public GridFrame(String name) { super(name); setLayout(new BorderLayout()); JButton btnArray[]; btnArray=new JButton[str.length]; for(int i=0;i<str.length;i++) { btnArray[i]=new JButton(str[i]); panel.add(btnArray[i]); } setVisible(true); setSize(250,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { GridFrame gf=new GridFrame("网格布局计算机!"); } }
显示效果如下图
(4)GridBagLayout
GridBagLayout也是一种表格,但是可以通过设定规则更自由的将控件绑定到容器上:
如下图:
将容器切割为若干个小的格子Cell,然后向这些Cell中添加控件,同时可以在某一个(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )方向上连续的几个Cell进行拼接,组成一个大的Cell放置控件。
操作步骤如下:
(1)new GridBagLayout() 设置到指定容器上。
(2)GridBagConstraint gbc 新增这样的一个容器规则。(注意Constraint是规则、约束、条件的意思)
设定的参数规则如下
gridx gridy 索引
gridwidth gridheight 跨越的索引
fill 是否动态扩充
weightx、weighty 扩大的权重
(3)gb.setConstraints(控件,gbc) 将控件和规则绑定起来
(4)constainer.add(c) 添加容器,然后将控件添加到容器上。
同时gbc 可以重用,反复的设定骨子额,绑定规则,添加容器
重复 2、3、4步
请参照 如下代码 ,重点注意 addComponent()方法:
public class NumberPad { private static final Insets insets = new Insets(0, 0, 0, 0); public static void main(final String args[]) { final JFrame frame = new JFrame("NumberPad"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口操作 frame.setLayout(new GridBagLayout());//框架布局 JButton button; //下面利用设立的类对按键进行布局 //第一行 button = new JButton("Num"); addComponent(frame, button, 0, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("/"); addComponent(frame, button, 1, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("*"); addComponent(frame, button, 2, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("-"); addComponent(frame, button, 3, 0, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); //第二行 button = new JButton("1"); addComponent(frame, button, 0, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("2"); addComponent(frame, button, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("3"); addComponent(frame, button, 2, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("+"); addComponent(frame, button, 3, 1, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH); // 第三行 button = new JButton("4"); addComponent(frame, button, 0, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("5"); addComponent(frame, button, 1, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("6"); addComponent(frame, button, 2, 2, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); //第四行 button = new JButton("7"); addComponent(frame, button, 0, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("8"); addComponent(frame, button, 1, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("9"); addComponent(frame, button, 2, 3, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("Enter"); addComponent(frame, button, 3, 3, 1, 2, GridBagConstraints.CENTER, GridBagConstraints.BOTH); //第五行 button = new JButton("0"); addComponent(frame, button, 0, 4, 2, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); button = new JButton("."); addComponent(frame, button, 2, 4, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH); frame.setSize(250,250); frame.setVisible(true); } private static void addComponent(Container container, Component component, int gridx, int gridy, int gridwidth, int gridheight, int anchor, int fill) { GridBagConstraints gbc = new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets, 0, 0);//建立网格包对象 container.add(component, gbc);//添加到容器中 }
ps 此代码来自http://blog.sina.com.cn/s/blog_6cea57330100pwvq.html
这里有几点要注意的
(1)控制动态扩充的fill参数,有四个值分别为 水平扩充、垂直扩充、水平垂直扩充、不扩充。大家根据自己的实际情况来选择
(2)weightx、weighty 是扩大的权重,这个权重表示的是,当横向(防盗连接:本文首发自http://www.cnblogs.com/jilodream/ )或纵向扩大N的倍数后,那么他占的比重是多少。这里要小心,就是权重大的话,如果往大拖容器size,那么这个控件增长的快,同时当size变小时,权重大的也缩小的更快。所以如果要想让权重大的控件始终大时,需要将几个控件的初始size设定的非常小,这样所有的控件都是在拖大的状态了。
相关文章推荐
- Spring之Bean的创建和装配
- 仲恺acm 1082:寻找最低数【java】
- 最小生成树之克鲁斯卡尔算法 ( java版)
- 仲恺acm 1073:2^x mod n = 1【java】
- SSH答疑解惑系列(二)——java.lang.reflect.InvocationTargetException异常
- <Java>函数的参数是数组
- jdk的 安装
- Java Swing小结
- 深入浅出Java类和对象的初始化
- spring MVC拦截器01
- java19.IO操作------使用字符流读写数据
- vim+ycm+eclim+javacomplete解决冲突
- hibernate spring annotation setup
- myeclipse 各种错误
- Spring Boot -- Start Up
- 线程死锁
- 【Java EE 学习 82 下】【MAVEN整合Eclipse】【MAVEN的一些高级概念】
- 初学java感想
- Java Nio 五、分散/聚集
- Struts2和hibernate3的简单应用-登录验证