GridBagLayout布局

1.先在一个固定的范围内做好规划,先别考虑拉伸;
把能固定的先固定了;

2.在水平方向和垂直方向上找一个最适合用来拉伸的组件,将其设置为可拉伸;

3.然后可以调整原先设定好的参数,设定容器的bounds

补充:
0.组件的GridWidth GridHeight针对的是自身的宽高
1.JPanel 没有默认的宽高,所以一般用来占位,填充空隙,拉伸;
2.JPanel 必须设置为某一方向上的拉伸,要不然就无用了
3.JPanel 因为没有宽高,所以JPanel之间布局时,只有设置其约束的iPadX iPadY,固定其宽高
4.JPanel因为用来拉伸,所以其约束GridWidth 和 GridHeight 有一个规范的作用,比如
JPanel (2,1),另外同一列的组件为(1,1),那么这个组件是不会超过JPanel的
5.组件布局直接在一个容器中进行,不要再划分为JPanel布局,因为JPanel布局难
确定宽高,拉伸复杂
6.一个可拉伸的组件被水平拉伸时,垂直方向上与之有交集的组件也会被拉伸
7.一个可拉伸的组件被垂直拉伸时,水平方向上与之有交集的组件也会被拉伸

Test

package Test;
import javax.swing.*;



import java.awt.*;
import java.awt.event.*;

public class Test extends JFrame{

    public Test (){
        super();
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(1);
            }
        });
        this.setLayout(new GridBagLayout());
        this.setBounds(200,200,300,300);
        this.initComponent();
//      this.pack();
    }
    
    private void initComponent(){
     
        //上侧的工具选择面板  
        JPanel toolSelectPanel = new JPanel();  
        toolSelectPanel.setBackground(Color.green);  
        this.add(toolSelectPanel, new GBC(0,0,2,1).setIpad(200,50).  
                     setFill(GBC.BOTH).setWeight(100, 0));  
        
        //左侧的具体工具面板  
        JPanel toolConcretePanel = new JPanel();  
        toolConcretePanel.setBackground(Color.YELLOW);  
        this.add(toolConcretePanel,new GBC(0,1,1,1).setIpad(50,100).  
                     setFill(GBC.BOTH).setWeight(0, 100));  
        
        //右侧的绘图面板  
        JPanel drawPanel = new JPanel();  
        drawPanel.setBackground(Color.pink);  
        this.add(drawPanel,new GBC(1,1,1,1).setFill(GBC.BOTH).setWeight(100, 100));  
        
        /*这里面的GridWidth和GridHeight是起到的一个规范的作用,比如:
         右侧的绘图面板(1,1),上侧的工具选择面板(2,1),那么(1,1)是不会超过(2,1)的*/
        
        //下侧的颜色选择面板  
        JPanel colorPanel = new JPanel();  
        colorPanel.setBackground(Color.LIGHT_GRAY);  
        this.add(colorPanel,new GBC(0,2,2,1).setIpad(200,20).  
                     setFill(GBC.BOTH).setWeight(100, 0)); 
        
        //下侧的状态面板  
        JPanel statePanel = new JPanel();  
        statePanel.setBackground(Color.CYAN);  
        this.add(statePanel,new GBC(0,3,2,1).setIpad(200,50).  
                      setFill(GBC.BOTH).setWeight(100, 0));  
        
    }
    
    public static void main(String[] args) {
        new Test ().setVisible(true);;
    }
}

Paste_Image.png

Test2

package Test;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

public class Test2 extends JFrame{
    public Test2 (){
        super();
        this.setLayout(new GridBagLayout());
        this.initComponents();
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(1);
            }
        });
        this.setBounds(200,200,500,400);
//      this.pack();
    }   
    
    private void initComponents (){
        //第一行
        this.add(new JButton("打开"),new GBC(0,0,1,1).setFill(GBC.BOTH).setWeight(0, 0));
        this.add(new JButton("保存"),new GBC(1,0,1,1).setFill(GBC.BOTH).setWeight(0, 0));
        this.add(new JButton("另存为"),new GBC(2,0,1,1).setFill(GBC.BOTH).setWeight(0, 0));
        this.add(new JPanel(),new GBC(3,0,1,1).setFill(GBC.BOTH).setWeight(100, 0));
        
        //第二行
        JLabel label = new JLabel("JLabel");
        label.setOpaque(true);//设置为不透明,才能设置背景颜色
        label.setBackground(Color.cyan);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setVerticalAlignment(SwingConstants.CENTER);
        
        this.add(label,new GBC(0,1,2,1).setFill(GBC.BOTH).setWeight(0, 0));
        this.add(new JTextField("JTextField"),new GBC(2,1,5,1).setFill(GBC.BOTH).setWeight(100, 0));
        this.add(new JButton("清空"),new GBC(7,1,1,1).setFill(GBC.BOTH).setWeight(0, 0));
        
        //第三行
        JTextArea textArea = new JTextArea("");
        textArea.setLineWrap(true);
        textArea.setForeground(Color.BLACK);
        textArea.setMargin(new Insets(7,7,7,7));
        textArea.setBackground(Color.PINK);
        String arr[] = {"java","android","ios","php","python","c++"};
        this.add(new JList(arr),new GBC(0,2,2,1).setFill(GBC.BOTH).setWeight(0, 100));
        this.add(textArea,new GBC(2,2,6,1).setFill(GBC.BOTH).setWeight(100, 100));
    }
    
    public static void main(String[] args) {
        new Test2().setVisible(true);
    }

}

Paste_Image.png

Test3

package Calculator;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Calculator extends JFrame{
    private JLabel _label;
    private JPanel _containerP;
    private StringBuffer _strBuffer;
    
    public Calculator (){
        super();
        this.setBounds(200,200,300, 350);
        _containerP = new JPanel ();
        _containerP.setLayout(new GridBagLayout());
        this.add(_containerP);
        this.initComponents();
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(1);
            }
        });
    }
    
    private void initComponents(){
        //第0行
        _label = new JLabel("结果");
        _label.setHorizontalAlignment(SwingConstants.CENTER);
        _containerP.add(_label, new GBC(0,0,4,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        //第一行
        _containerP.add(new JButton("AC"),new GBC(0,1,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("+/-"),new GBC(1,1,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("%"),new GBC(2,1,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("÷"),new GBC(3,1,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        //第二行
        _containerP.add(new JButton("7"),new GBC(0,2,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("8"),new GBC(1,2,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("9"),new GBC(2,2,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("x"),new GBC(3,2,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        //第三行
        _containerP.add(new JButton("4"),new GBC(0,3,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("5"),new GBC(1,3,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("6"),new GBC(2,3,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("-"),new GBC(3,3,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        //第四行
        _containerP.add(new JButton("1"),new GBC(0,4,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("2"),new GBC(1,4,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("3"),new GBC(2,4,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("+"),new GBC(3,4,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        //第五行
        _containerP.add(new JButton("0"),new GBC(0,5,2,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("."),new GBC(2,5,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        _containerP.add(new JButton("="),new GBC(3,5,1,1).setWeight(100, 100).setFill(GBC.BOTH));
        
        
        _strBuffer = new StringBuffer();
        for (int i = 0;i<_containerP.getComponents().length;i++){
            
            Object obj = _containerP.getComponent(i);
            if (obj instanceof JButton){
                ((JButton) obj).addActionListener(new ActionListener(){

                    public void actionPerformed(ActionEvent e) {
                        JButton btn = (JButton) e.getSource();
                        switch (btn.getText()){
                        case "=":
                            _strBuffer.setLength(0);
                            _label.setText("哈哈,功能没实现!");
                            break;
                        default:
                            _strBuffer.append(((JButton) obj).getText());
                            _label.setText(_strBuffer.toString());
                            break;
                        }
                        
                    }
                    
                });
            }
        }
    }
            
    public static void main(String[] args) {
        new Calculator().setVisible(true);
    }
}
Paste_Image.png

GBC

package 文件选择器;

import java.awt.GridBagConstraints;
import java.awt.Insets;

public class GBC extends GridBagConstraints{
      
       //初始化左上角位置  
   public GBC(int gridx, int gridy)  
   {  
      this.gridx = gridx;  
      this.gridy = gridy;  
   }  
  
   //初始化左上角位置和所占行数和列数  
   public GBC(int gridx, int gridy, int gridwidth, int gridheight)  
   {  
      this.gridx = gridx;  
      this.gridy = gridy;  
      this.gridwidth = gridwidth;  
      this.gridheight = gridheight;  
   }  
  
   //对齐方式  
   public GBC setAnchor(int anchor)  
   {  
      this.anchor = anchor;  
      return this;  
   }  
  
   //是否拉伸及拉伸方向  
   public GBC setFill(int fill)  
   {  
      this.fill = fill;  
      return this;  
   }  
  
   //x和y方向上的增量  
   public GBC setWeight(double weightx, double weighty)  
   {  
      this.weightx = weightx;  
      this.weighty = weighty;  
      return this;  
   }  
  
   //外部填充  
   public GBC setInsets(int distance)  
   {  
      this.insets = new Insets(distance, distance, distance, distance);  
      return this;  
   }  
  
   //外填充  
   public GBC setInsets(int top, int left, int bottom, int right)  
   {  
      this.insets = new Insets(top, left, bottom, right);  
      return this;  
   }  
  
   //内填充  
   public GBC setIpad(int ipadx, int ipady)  
   {  
      this.ipadx = ipadx;  
      this.ipady = ipady;  
      return this;  
   }  
      
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容