Java灵活使用GridBagLayout

Home / Article MrLee 2016-12-21 3210

GridBagLayout使用稍微繁琐,但是非常的灵活。可以实现任意效果。下面提供2个例子供学习参考:
package com.opentcs.customization;
import java.awt.Button;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
public class GridBagLayoutTest {
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		JFrame f = new JFrame();
		GridBagLayout gb = new GridBagLayout();
		GridBagConstraints gbc = new GridBagConstraints();
		Button[] bs = new Button[10];
		f.setLayout(gb);
		for (int i = 0; i < bs.length; ++i) {
			bs[i] = new Button("button" + i);
		}
		// 所有组件都可以在横向、纵向扩大
		gbc.fill = GridBagConstraints.BOTH;
		gbc.weightx = 1;
		gb.setConstraints(bs[0], gbc);
		f.add(bs[0]);
		gb.setConstraints(bs[1], gbc);
		f.add(bs[1]);
		gb.setConstraints(bs[2], gbc);
		f.add(bs[2]);
		// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(bs[3], gbc);
		f.add(bs[3]);
		// 该GridBagConstraints控制的GUI组件将在横向不会扩大
		gbc.weightx = 0;
		gb.setConstraints(bs[4], gbc);
		f.add(bs[4]);
		// 该GridBagConstraints控制的GUI组件将横跨两个网格
		gbc.gridwidth = 2;
		gb.setConstraints(bs[5], gbc);
		f.add(bs[5]);
		// 该GridBagConstraints控制的GUI组件将横跨一个网格
		gbc.gridwidth = 1;
		// 该GridBagConstraints控制的GUI组件将纵跨两个网格
		gbc.gridheight = 2;
		// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		gb.setConstraints(bs[6], gbc);
		f.add(bs[6]);
		// 该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
		gbc.gridwidth = 1;
		gbc.gridheight = 2;
		// 该GridBagConstraints控制的GUI组件纵向扩大的权重是1
		gbc.weighty = 1;
		gb.setConstraints(bs[7], gbc);
		f.add(bs[7]);
		// 设置下面的按钮在纵向不会扩大
		gbc.weighty = 0;
		// 该GridBagConstraints控制的GUI组件将会成为横向最后一个组件
		gbc.gridwidth = GridBagConstraints.REMAINDER;
		// 该GridBagConstraints控制的GUI组件将纵向跨一个网格
		gbc.gridheight = 1;
		gb.setConstraints(bs[8], gbc);
		f.add(bs[8]);
		gb.setConstraints(bs[9], gbc);
		f.add(bs[9]);
		f.setSize(800, 600);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLocationRelativeTo(null);
	}
}

例子二:
package com.opentcs.customization;
 
import java.awt.Button;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
 
public class CGridBagLayout {
 
    public static void main(String[] args) {
        JFrame f = new JFrame();  
        GridBagLayout gb = new GridBagLayout();  
        GridBagConstraints gbc = new GridBagConstraints();  
        Button[] btn = new Button[10];
        f.setLayout(gb);   
        for (int i = 0; i < btn.length; ++i)  
        {  
            btn[i] = new Button("BUTTON"+i);  
        }
        //所有组件都可以在横向、纵向扩大  
        gbc.fill = GridBagConstraints.BOTH; 
        //该GridBagConstraints控制的GUI组件左对齐
        gbc.anchor = GridBagConstraints.WEST;
        //该GridBagConstraints控制的GUI组件纵向、横向扩大的权重是1 
        gbc.weighty = 1; 
        gbc.weightx = 1;
        //该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格  
        gbc.gridwidth = 1; gbc.gridheight = 2;    
        gb.setConstraints(btn[0], gbc);  
        f.add(btn[0]);  
        //该GridBagConstraints控制的GUI组件将横向跨两个网格,纵向跨一个网格  
        gbc.gridwidth = 2; gbc.gridheight = 1;  
        gb.setConstraints(btn[1], gbc);  
        f.add(btn[1]);  
        //该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
        gbc.gridwidth = 1; gbc.gridheight = 2;
        //该GridBagConstraints控制的GUI组件将会成为横向最后一个组件  
        gbc.gridwidth = GridBagConstraints.REMAINDER;  
        gb.setConstraints(btn[2], gbc);  
        f.add(btn[2]); 
        gbc.gridx = 1; gbc.gridy = 1;//第二行,第二列
        //该GridBagConstraints控制的GUI组件将横向跨两个网格,纵向跨一个网格
        gbc.gridwidth = 2; gbc.gridheight = 1;
        gb.setConstraints(btn[3], gbc);  
        f.add(btn[3]); 
        gbc.gridx = 0; gbc.gridy = 2;//第三行,第一列
        //该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格  
        gbc.gridwidth = 1; gbc.gridheight = 2;    
        gb.setConstraints(btn[4], gbc);  
        f.add(btn[4]); 
        gbc.gridx = 1; gbc.gridy = 2;//第三行,第二列
        //该GridBagConstraints控制的GUI组件将纵向、横向跨一个网格  
        gbc.gridwidth = 1; gbc.gridheight = 1;  
        gb.setConstraints(btn[5], gbc);  
        f.add(btn[5]);
        gbc.gridx = 2; gbc.gridy = 2;//第三行,第三列
        gb.setConstraints(btn[6], gbc);  
        f.add(btn[6]); 
        gbc.gridx = 3; gbc.gridy = 2;//第三行,第四列
        //该GridBagConstraints控制的GUI组件将横向跨一个网格,纵向跨两个网格
        gbc.gridwidth = 1; gbc.gridheight = 2;
        //该GridBagConstraints控制的GUI组件将会成为横向最后一个组件  
        gbc.gridwidth = GridBagConstraints.REMAINDER;  
        gb.setConstraints(btn[7], gbc);  
        f.add(btn[7]); 
        gbc.gridx = 1; gbc.gridy = 3;//第四行,第二列
        //该GridBagConstraints控制的GUI组件将纵向跨两个网格
        gbc.gridwidth = 1; gbc.gridheight = 1;
        gb.setConstraints(btn[8], gbc);  
        f.add(btn[8]);
        gbc.gridx = 2; gbc.gridy = 3;//第三行,第三列
        gb.setConstraints(btn[9], gbc);  
        f.add(btn[9]);
		f.setSize(800, 600);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setLocationRelativeTo(null);
    }
}

效果图:

20161221102813

20161221102830

本文链接:https://www.it72.com/11566.htm

推荐阅读
最新回复 (0)
返回