zoukankan      html  css  js  c++  java
  • GridBagLayout练习

     摘自http://blog.csdn.net/qq_18989901/article/details/52403737

     GridBagLayout的用法

    GridBagLayout是面板设计中最复杂的布局工具,当然用的好的话也是最方便的。

    GridBagLayout其组件的摆放都是有GridBagConstraints控制的。可以将需要设计的界面划分成许多个纵横的小网格,每个网格里面最多放置一个组件,一个组件可以占用多个网格。

    网格的定义是由gridx和gridy定义的,前者表示横坐标,后者表示纵坐标,坐标是从0开始,从整个面板的左上角开始算起,所以在上图中,按钮7所在的位置gridx=0,gridy=0;以此类推,后面所有的网格位置都可以这样定义;

    但是图中网格的宽度和高度是由什么定义的呢?答案是gridwidth和gridheight,为1表示占用一个网格,为2表示占用两个网格,如上图中"+"的gridwidth=1,gridheight=2;

    知道这两个,就可以大体把网格划分清楚,每一个的具体位置也就有了着落。有朋友会说,我也是这样写的,但是组件怎么就那么小呢?那是因为GridBaglayout里面还有一项参数weight,她控制着组件随着面板的变化自身的变化情况,默认情况下weightx=0,weighty=0,意思是组件大小固定,不管面板如何变,自身就那么大,但是如果想让组件随面板变化的话,可以设置weightx和weighty,设置为浮点数也行,其值代表着变化的大小,也就是你宽度设为2,高度设为1的话,拉大面板会使组件越变越宽。

    这三个是比较重要的Constraints,另外,还有insets,其有四个参数,表示其上左下右和相邻组件的最小间隔;ipadx和ipady表示组件间距,默认是0(其和insets不同读者可以自己摸索一下);fill参数表示当网格区域比组件大的伤害,组件是以何种方式填充区域,是全方位还是水平或竖直;anchor是区域比组件大时,组件应该显示在区域的哪个方位,西北还是东南;

    测试1:

    本文主要通过设计一个计算器界面的方式,来学习GridBagLayout的使用。最终的效果如下图所示:

    下面是我实现面板显示部分的所有代码:

      1 package com.wst.bj;
      2 
      3 import java.awt.GridBagConstraints;
      4 import java.awt.GridBagLayout;
      5 import java.awt.Insets;
      6 
      7 import javax.swing.JButton;
      8 import javax.swing.JFrame;
      9 import javax.swing.JPanel;
     10 import javax.swing.JTextField;
     11 
     12 public class GridBagTest2 {
     13 
     14     private JFrame jframe = new JFrame(); 
     15     private JButton bt1 = new JButton("1");
     16     private JButton bt2 = new JButton("2");
     17     private JButton bt3 = new JButton("3");
     18     private JButton bt4 = new JButton("4");
     19     private JButton bt5 = new JButton("5");
     20     private JButton bt6 = new JButton("6");
     21     private JButton bt7 = new JButton("7");
     22     private JButton bt8 = new JButton("8");
     23     private JButton bt9 = new JButton("9");
     24     private JButton bt0 = new JButton("0");
     25     private JButton btdot = new JButton(".");
     26     private JButton btsignleft = new JButton("(");
     27     private JButton btsignright = new JButton(")");
     28     private JButton btp = new JButton("+");
     29     private JButton btm = new JButton("-");
     30     private JButton btmp = new JButton("*");
     31     private JButton btd = new JButton("/");
     32     private JButton bte = new JButton("=");
     33     private JButton bt = new JButton("00");
     34     private JButton btclear = new JButton("cl");
     35     private JTextField textField = new JTextField();
     36 
     37     public GridBagTest2() {
     38         init();
     39     }
     40 
     41     private void init()
     42     {
     43         FrameUtil.initFram(jframe, 300, 400);
     44         JPanel jpanel = createPanel();
     45         jframe.add(jpanel);
     46     }
     47     
     48     
     49     private JPanel createPanel(){
     50         JPanel panel = new JPanel();
     51         
     52         GridBagLayout gbl = new GridBagLayout();
     53         GridBagConstraints gbs = new GridBagConstraints();
     54         panel.setLayout(gbl);
     55         
     56         panel.add(bt7);panel.add(bt8);panel.add(bt9);panel.add(btp);
     57         panel.add(bt4);panel.add(bt5);panel.add(bt6);
     58 //      panel.add(bt1);panel.add(bt2);panel.add(bt9);panel.add(btp);
     59         panel.add(bt1);panel.add(bt2);panel.add(bt3);panel.add(btm);
     60         panel.add(bt0);panel.add(btdot);
     61         panel.add(btsignleft);panel.add(btsignright);panel.add(bte);panel.add(btmp);
     62         panel.add(btclear);panel.add(bt);                panel.add(btd);
     63         panel.add(textField);
     64         
     65         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     66         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     67         gbs.gridx=0;gbs.gridy=0;
     68         gbl.setConstraints(bt7, gbs);
     69         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     70         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     71         gbs.gridx=1;gbs.gridy=0;
     72         gbl.setConstraints(bt8, gbs);
     73         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     74         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     75         gbs.gridx=2;gbs.gridy=0;
     76         gbl.setConstraints(bt9, gbs);
     77         
     78         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=2;
     79         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     80         gbs.gridx=3;gbs.gridy=0;
     81         gbl.setConstraints(btp, gbs);    
     82         
     83         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     84         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     85         gbs.gridx=0;gbs.gridy=1;
     86         gbl.setConstraints(bt4, gbs);
     87         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     88         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     89         gbs.gridx=1;gbs.gridy=1;
     90         gbl.setConstraints(bt5, gbs);
     91         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     92         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     93         gbs.gridx=2;gbs.gridy=1;
     94         gbl.setConstraints(bt6, gbs);
     95         
     96         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
     97         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
     98         gbs.gridx=0;gbs.gridy=2;
     99         gbl.setConstraints(bt1, gbs);
    100         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    101         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    102         gbs.gridx=1;gbs.gridy=2;
    103         gbl.setConstraints(bt2, gbs);
    104         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    105         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    106         gbs.gridx=2;gbs.gridy=2;
    107         gbl.setConstraints(bt3, gbs);
    108         
    109         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=2;
    110         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    111         gbs.gridx=3;gbs.gridy=2;
    112         gbl.setConstraints(btm, gbs);
    113         
    114         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=2;gbs.gridheight=1;
    115         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    116         gbs.gridx=0;gbs.gridy=3;
    117         gbl.setConstraints(bt0, gbs);
    118         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    119         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    120         gbs.gridx=2;gbs.gridy=3;
    121         gbl.setConstraints(btdot, gbs);
    122         
    123         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    124         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    125         gbs.gridx=0;gbs.gridy=4;
    126         gbl.setConstraints(btsignleft, gbs);
    127         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    128         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    129         gbs.gridx=1;gbs.gridy=4;
    130         gbl.setConstraints(btsignright, gbs);
    131         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=2;
    132         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    133         gbs.gridx=2;gbs.gridy=4;
    134         gbl.setConstraints(bte, gbs);
    135         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    136         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    137         gbs.gridx=3;gbs.gridy=4;
    138         gbl.setConstraints(btmp, gbs);
    139         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    140         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    141         gbs.gridx=0;gbs.gridy=5;
    142         gbl.setConstraints(btclear, gbs);
    143         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    144         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    145         gbs.gridx=1;gbs.gridy=5;
    146         gbl.setConstraints(bt, gbs);
    147         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=1;gbs.gridheight=1;
    148         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    149         gbs.gridx=3;gbs.gridy=5;
    150         gbl.setConstraints(btd, gbs);
    151         
    152         gbs.fill=GridBagConstraints.BOTH;gbs.gridwidth=4;gbs.gridheight=3;
    153         gbs.insets=new Insets(5, 5, 5, 5);gbs.weightx=1;gbs.weighty=1;
    154         gbs.gridx=0;gbs.gridy=6;
    155         gbl.setConstraints(textField, gbs);
    156         
    157         return panel;
    158     }
    159 }

    测试2:

      1 package com.wst.bj;
      2 
      3 
      4 import java.awt.GridBagConstraints;
      5 import java.awt.GridBagLayout;
      6 import java.awt.Insets;
      7 
      8 import javax.swing.JButton;
      9 import javax.swing.JFrame;
     10 import javax.swing.JPanel;
     11 import javax.swing.JTextField;
     12 
     13 public class GridBagTest4 {
     14 
     15     private JFrame jframe = new JFrame(); 
     16     private JButton bt1 = new JButton("1");
     17     private JButton bt2 = new JButton("2");
     18     private JButton bt3 = new JButton("3");
     19     private JButton bt4 = new JButton("4");
     20     private JButton bt5 = new JButton("5");
     21     private JButton bt6 = new JButton("6");
     22     private JButton bt7 = new JButton("7");
     23     private JButton bt8 = new JButton("8");
     24     private JButton bt9 = new JButton("9");
     25     private JButton bt0 = new JButton("0");
     26     private JButton btdot = new JButton(".");
     27     private JButton btsignleft = new JButton("(");
     28     private JButton btsignright = new JButton(")");
     29     private JButton btp = new JButton("+");
     30     private JButton btm = new JButton("-");
     31     private JButton btmp = new JButton("*");
     32     private JButton btd = new JButton("/");
     33     private JButton bte = new JButton("=");
     34     private JButton bt = new JButton("00");
     35     private JButton btclear = new JButton("cl");
     36     private JTextField textField = new JTextField();
     37 
     38     public GridBagTest4() {
     39         init();
     40     }
     41 
     42     private void init()
     43     {
     44         FrameUtil.initFram(jframe, 300, 400);
     45         JPanel jpanel = createPanel();
     46         jframe.add(jpanel);
     47     }
     48     
     49     
     50     private JPanel createPanel(){
     51         JPanel panel = new JPanel();
     52         
     53         GridBagLayout gbl = new GridBagLayout();
     54         GridBagConstraints gbs = new GridBagConstraints();
     55         panel.setLayout(gbl);
     56         
     57         panel.add(bt7);panel.add(bt8);panel.add(bt9);panel.add(btp);
     58         panel.add(bt4);panel.add(bt5);panel.add(bt6);
     59         panel.add(bt1);panel.add(bt2);panel.add(bt3);panel.add(btm);
     60         panel.add(bt0);panel.add(btdot);
     61         panel.add(btsignleft);panel.add(btsignright);panel.add(bte);panel.add(btmp);
     62         panel.add(btclear);panel.add(bt);                panel.add(btd);
     63         panel.add(textField);
     64         
     65         gbs.fill=GridBagConstraints.NONE;
     66 //        gbs.gridwidth=1;gbs.gridheight=1;
     67 //        gbs.insets=new Insets(5, 5, 5, 5);
     68 //        gbs.ipadx = 100;
     69 //        gbs.ipady = 100;
     70         gbs.anchor = GridBagConstraints.WEST;
     71         gbs.weightx=1;gbs.weighty=1;
     72         gbs.gridx=0;gbs.gridy=0;
     73         gbl.setConstraints(bt7, gbs);
     74         
     75         gbs.fill=GridBagConstraints.NONE;
     76 //        gbs.gridwidth=1;gbs.gridheight=1;
     77 //        gbs.insets=new Insets(5, 5, 5, 5);
     78 //        gbs.weightx=1;gbs.weighty=1;
     79         gbs.anchor = GridBagConstraints.NORTHEAST;
     80         gbs.gridx=1;gbs.gridy=0;
     81         gbl.setConstraints(bt8, gbs);
     82         
     83         gbs.fill=GridBagConstraints.NONE;
     84 //        gbs.gridwidth=1;gbs.gridheight=1;
     85 //        gbs.insets=new Insets(5, 5, 5, 5);
     86 //        gbs.weightx=1;gbs.weighty=1;
     87         gbs.anchor = GridBagConstraints.SOUTH;
     88         gbs.gridx=2;gbs.gridy=0;
     89         gbl.setConstraints(bt9, gbs);
     90 //        
     91         gbs.fill=GridBagConstraints.BOTH;
     92         gbs.gridwidth=1;gbs.gridheight=2;
     93 ////        gbs.insets=new Insets(5, 5, 5, 5);
     94 ////        gbs.weightx=1;gbs.weighty=1;
     95         gbs.gridx=3;gbs.gridy=0;
     96         gbl.setConstraints(btp, gbs);    
     97         // =====================================================
     98         gbs.fill=GridBagConstraints.VERTICAL;
     99         gbs.gridwidth=1;gbs.gridheight=1;
    100 //        gbs.insets=new Insets(5, 5, 5, 5);
    101 //        gbs.weightx=1;gbs.weighty=1;
    102         gbs.anchor = GridBagConstraints.WEST;
    103         gbs.gridx=0;gbs.gridy=1;
    104         gbl.setConstraints(bt4, gbs);
    105 //        
    106         gbs.fill=GridBagConstraints.VERTICAL;
    107         gbs.gridwidth=1;gbs.gridheight=1;
    108 //        gbs.insets=new Insets(5, 5, 5, 5);
    109 //        gbs.weightx=1;gbs.weighty=1;
    110         gbs.anchor = GridBagConstraints.SOUTHEAST;
    111         gbs.gridx=1;gbs.gridy=1;
    112         gbl.setConstraints(bt5, gbs);
    113         
    114         gbs.fill=GridBagConstraints.VERTICAL;
    115         gbs.gridwidth=1;gbs.gridheight=1;
    116 //        gbs.insets=new Insets(5, 5, 5, 5);
    117 //        gbs.weightx=1;gbs.weighty=1;
    118         gbs.anchor = GridBagConstraints.CENTER;
    119         gbs.gridx=2;gbs.gridy=1;
    120         gbl.setConstraints(bt6, gbs);
    121         // =====================================================
    122         gbs.fill=GridBagConstraints.HORIZONTAL;
    123         gbs.gridwidth=1;gbs.gridheight=1;
    124 //        gbs.insets=new Insets(5, 5, 5, 5);
    125 //        gbs.weightx=1;gbs.weighty=1;
    126         gbs.anchor = GridBagConstraints.NORTH;
    127         gbs.gridx=0;gbs.gridy=2;
    128         gbl.setConstraints(bt1, gbs);
    129         
    130         gbs.fill=GridBagConstraints.HORIZONTAL;
    131         gbs.gridwidth=1;gbs.gridheight=1;
    132 //        gbs.insets=new Insets(5, 5, 5, 5);
    133 //        gbs.weightx=1;gbs.weighty=1;
    134         gbs.anchor = GridBagConstraints.SOUTHEAST;
    135         gbs.gridx=1;gbs.gridy=2;
    136         gbl.setConstraints(bt2, gbs);
    137         
    138         gbs.fill=GridBagConstraints.HORIZONTAL;
    139         gbs.gridwidth=1;gbs.gridheight=1;
    140 //        gbs.insets=new Insets(5, 5, 5, 5);
    141 //        gbs.weightx=1;gbs.weighty=1;
    142         gbs.anchor = GridBagConstraints.CENTER;
    143         gbs.gridx=2;gbs.gridy=2;
    144         gbl.setConstraints(bt3, gbs);
    145         
    146         gbs.fill=GridBagConstraints.BOTH;        
    147         gbs.gridwidth=1;gbs.gridheight=2;
    148 //        gbs.insets=new Insets(5, 5, 5, 5);
    149 //        gbs.weightx=1;gbs.weighty=1;
    150         gbs.gridx=3;gbs.gridy=2;
    151         gbl.setConstraints(btm, gbs);
    152         // =====================================================
    153         gbs.fill=GridBagConstraints.BOTH;
    154         gbs.gridwidth=2;gbs.gridheight=1;
    155 //        gbs.insets=new Insets(5, 5, 5, 5);
    156 //        gbs.weightx=1;gbs.weighty=1;
    157         gbs.gridx=0;gbs.gridy=3;
    158         gbl.setConstraints(bt0, gbs);
    159         
    160         gbs.fill=GridBagConstraints.BOTH;
    161         gbs.gridwidth=1;gbs.gridheight=1;
    162 //        gbs.insets=new Insets(5, 5, 5, 5);
    163 //        gbs.weightx=1;gbs.weighty=1;
    164         gbs.gridx=2;gbs.gridy=3;
    165         gbl.setConstraints(btdot, gbs);
    166         // =====================================================
    167         gbs.fill=GridBagConstraints.BOTH;
    168         gbs.gridwidth=1;gbs.gridheight=1;
    169 //        gbs.insets=new Insets(5, 5, 5, 5);
    170 //        gbs.weightx=1;gbs.weighty=1;
    171         gbs.gridx=0;gbs.gridy=4;
    172         gbl.setConstraints(btsignleft, gbs);
    173         
    174         gbs.fill=GridBagConstraints.BOTH;
    175         gbs.gridwidth=1;gbs.gridheight=1;
    176         gbs.insets=new Insets(7, 7, 2, 2);
    177 //        gbs.weightx=1;gbs.weighty=1;
    178         gbs.gridx=1;gbs.gridy=4;
    179         gbl.setConstraints(btsignright, gbs);
    180         
    181         gbs.fill=GridBagConstraints.BOTH;
    182         gbs.gridwidth=1;gbs.gridheight=2;
    183         gbs.insets=new Insets(0, 0, 0, 0);
    184 //        gbs.weightx=1;gbs.weighty=1;
    185         gbs.gridx=2;gbs.gridy=4;
    186         gbl.setConstraints(bte, gbs);
    187         
    188         gbs.fill=GridBagConstraints.BOTH;
    189         gbs.gridwidth=1;gbs.gridheight=1;
    190 //        gbs.insets=new Insets(5, 5, 5, 5);
    191 //        gbs.weightx=1;gbs.weighty=1;
    192         gbs.gridx=3;gbs.gridy=4;
    193         gbl.setConstraints(btmp, gbs);
    194         // =====================================================
    195         gbs.fill=GridBagConstraints.BOTH;
    196         gbs.gridwidth=1;gbs.gridheight=1;
    197 //        gbs.insets=new Insets(5, 5, 5, 5);
    198         gbs.weightx=0;gbs.weighty=0;
    199         gbs.gridx=0;gbs.gridy=5;
    200         gbl.setConstraints(btclear, gbs);
    201         
    202         gbs.fill=GridBagConstraints.BOTH;
    203         gbs.gridwidth=1;gbs.gridheight=1;
    204 //        gbs.insets=new Insets(5, 5, 5, 5);
    205 //        gbs.weightx=1;gbs.weighty=1;
    206         gbs.gridx=1;gbs.gridy=5;
    207         gbl.setConstraints(bt, gbs);
    208         
    209         gbs.fill=GridBagConstraints.NONE;
    210         gbs.gridwidth=1;gbs.gridheight=1;
    211 //        gbs.insets=new Insets(5, 5, 5, 5);
    212 //        gbs.weightx=1;gbs.weighty=1;
    213         gbs.anchor = GridBagConstraints.EAST;
    214         gbs.gridx=3;gbs.gridy=5;
    215         gbl.setConstraints(btd, gbs);
    216         // =====================================================
    217         gbs.fill=GridBagConstraints.BOTH;
    218         gbs.gridwidth=4;gbs.gridheight=3;
    219 //        gbs.insets=new Insets(5, 5, 5, 5);
    220         gbs.weightx=1;gbs.weighty=1;
    221         gbs.gridx=0;gbs.gridy=6;
    222         gbl.setConstraints(textField, gbs);
    223 //        // =====================================================
    224         gbs.anchor = GridBagConstraints.NORTH;
    225         return panel;
    226     }
    227 }
  • 相关阅读:
    多组件共享-vuex —— 使用vuex 报错 actions should be function or object with ”handler“
    时间复杂度/空间复杂度
    Nodejs学习(三)-安装nodejs supervisor,提高点效率吧。
    Nodejs学习(二)-express生成器
    Nodejs学习(一)-Nodejs和express的安装和配置
    PHP连接MySQL的时候报错SQLSTATE[HY000] [2002] No such file or directory
    phpstorm 16.1 注册码
    Express安装过程
    NodeJs解析web一例
    NodeJs 连接mysql一例。
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/6158529.html
Copyright © 2011-2022 走看看