GridBagLayout布局管理器介绍

GridBagLayout是一个灵活的布局管理器,开发者可以根据设置动态单元网格的大小和比例来实现布局管理。每一个GridBagLayout管理的组件都和一个GridBagConstaints容器有关,该容器中限制了组件位置,大小等变化。

GridBagConstaints中常用字段介绍

  • gridx、gridy:网格起始位置,第一个组件的位置是gridx = 0,gridy =0;下一个组件的位置默认为GridBagConstaints.RELATIVE。
  • gridwidth、gridheight:制定网格所占的行和列的个数,默认为占用1行或1列。有REMAINDER代表该组件占用这一行或这一列
  • wightx、wighty:组件在一行或一列中占有的权重是多少。当容器大于组件的容量或者小于组件的容量时,组件进行缩放的比例。
  • fill:组件扩容或缩放打方向,NONE(默认值),HORIZONTAL(水平方向),VERTICAL(垂直方向),BOTH。
  • ipadx、ipady:布局组件的内部填充,相当与网页中的内边距(padding)。
  • insets:组件的外部填充。
  • anchor:组件位于显示区域何处。

GridBagLayout布局举例

布局介绍:

  第一部分:将文本域插入到Panel中,并将面板设置GridBagConstraints属性。

其中gridx = 0,gridy = 0 表示Panel从左上角插入,gridheight = 1,gridwidth = 1 表示占用一个网格。weightx = 1.0,weighty = 0.2表示当容器扩大缩小是,水平方向比例是1.0,垂直方向是0.2;

private JPanel getPanelByHead(GridBagLayout gridBagLayout, GridBagConstraints c) {
		c.gridx = 0;
		c.gridy = 0;
		c.gridheight = 1;
		c.gridwidth = 1;
		c.weightx = 1.0;
		c.weighty = 0.2;
		JPanel jPanel = new JPanel();
		jPanel.setLayout(new GridLayout(1, 1));
		JTextArea jTextArea = new JTextArea();
		jTextArea.setForeground(Color.decode("#FFFFCC"));
		jTextArea.setBackground(Color.decode("#666666"));
		jTextArea.setFont(new Font(Font.DIALOG, Font.BOLD, 16));
		jPanel.add(jTextArea);
		gridBagLayout.setConstraints(jPanel, c);
		return jPanel;
	}

  第二部分:将20个按钮插入到Panel中,并将面板设置GridBagConstraints属性。

  其中gridx = 0,gridy = 1表示上一个组件后插入,gridheight = 1,gridwidth = 1 表示占用一个网格。weightx = 1.0,weighty = 0.8表示当容器扩大缩小是,水平方向比例是1.0,垂直方向是0.8;

// 将按钮添加到面板中
	private JPanel getPanelByBody(GridBagLayout gridBagLayout, GridBagConstraints c) {

		c.gridx = 0;
		c.gridy = 1;

		c.gridheight = 1;
		c.gridwidth = 1;

		c.weightx = 1.0;
		c.weighty = 0.8;
		JPanel jPanel = new JPanel();
		jPanel.setLayout(new GridLayout(5, 4));
		List<JButton> numBut = getButtonByNumber();
		for (int i = 0; i < numBut.size(); i++) {
			jPanel.add(numBut.get(i));
		}
		gridBagLayout.setConstraints(jPanel, c);
		return jPanel;
	}

 

 

下面是完整代码代码:

package com.qyy;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;

public class Main extends JFrame {

	private int WIDTH = 618 * 2 / 3;
	private int HEIGHT = 1000 * 2 / 3;

	public Main() {
		this.setSize(WIDTH, HEIGHT);
		this.setTitle("GridBagLayout测试");
		init();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

	}

	// 数字按钮
	private List<JButton> getButtonByNumber() {
		List<JButton> list = new ArrayList<>();
		for (int i = 0; i < 20; i++) {
			JButton jButton = new JButton(i + " ");
			jButton.setFont(new Font(Font.DIALOG, 1, 20));
			jButton.setBackground(Color.decode("#99CCCC"));
			list.add(jButton);
		}
		return list;
	}

	// 将文本域添加到面板中
	private JPanel getPanelByHead(GridBagLayout gridBagLayout, GridBagConstraints c) {

		c.gridx = 0;
		c.gridy = 0;

		c.gridheight = 1;
		c.gridwidth = 1;

		c.weightx = 1.0;
		c.weighty = 0.2;

		JPanel jPanel = new JPanel();
		jPanel.setLayout(new GridLayout(1, 1));
		JTextArea jTextArea = new JTextArea();
		jTextArea.setForeground(Color.decode("#FFFFCC"));
		jTextArea.setBackground(Color.decode("#666666"));
		jTextArea.setFont(new Font(Font.DIALOG, Font.BOLD, 16));
		jPanel.add(jTextArea);
		gridBagLayout.setConstraints(jPanel, c);
		return jPanel;
	}

	// 将按钮添加到面板中
	private JPanel getPanelByBody(GridBagLayout gridBagLayout, GridBagConstraints c) {

		c.gridx = 0;
		c.gridy = 1;

		c.gridheight = 1;
		c.gridwidth = 1;

		c.weightx = 1.0;
		c.weighty = 0.8;

		JPanel jPanel = new JPanel();

		jPanel.setLayout(new GridLayout(5, 4));
		List<JButton> numBut = getButtonByNumber();

		for (int i = 0; i < numBut.size(); i++) {

			jPanel.add(numBut.get(i));
		}
		gridBagLayout.setConstraints(jPanel, c);
		return jPanel;
	}

	// 初始化
	public void init() {

		GridBagLayout gridBagLayout = new GridBagLayout();

		GridBagConstraints c = new GridBagConstraints();

		c.fill = GridBagConstraints.BOTH;

		this.setLayout(gridBagLayout);

		this.add(getPanelByHead(gridBagLayout, c));
		this.add(getPanelByBody(gridBagLayout, c));

	}

	public static void main(String[] args) {
		new Main();

	}
}

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值