使用GridBagLayout实现的计算器UI

GridBagLayout相对于GridLayout来说更灵活,功能也更强大,用它实现的计算器的布局效果图如下:

 

import java.awt.*;
import javax.swing.*;

/**
 * Calculator类,实现计算器界面
 * @author Ares
 */
public class Calculator{
	final String[] KEYS = { "CE", "C", "←", "÷", "7", "8", "9", "×", "4","5", "6", "-", "1", "2", "3", "+", "0", ".", "=" };
	JButton[] keys = new JButton[KEYS.length];
	JTextField resultText = new JTextField("0");
	
	public void addComponentsToPane(Container pane) {
		GridBagLayout layout = new GridBagLayout();
		pane.setLayout(layout);
		resultText.setFont(new Font("Century Schoolbook", Font.PLAIN, 14));
		resultText.setEditable(false);
		resultText.setHorizontalAlignment(SwingConstants.RIGHT);
		pane.add(resultText,new GBC(0, 0, 4, 1).setIpad(400, 50).setWeight(0.5, 0.5).setFill(GridBagConstraints.BOTH));
		for (int i = 0; i < keys.length; i++) {
			keys[i] = new JButton(KEYS[i]);
			if(i == keys.length-3){
				pane.add(keys[i],new GBC(i % 4, i / 4 + 1,2,1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
			}else if (i == keys.length-2 || i == keys.length-1) {
				pane.add(keys[i],new GBC(i % 4+1, i / 4 + 1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
			}else {
				pane.add(keys[i], new GBC(i % 4, i / 4 + 1).setIpad(0, 12).setInsets(1).setFill(GridBagConstraints.BOTH).setWeight(0.5, 0.5));
			}
		}
	}
	
	public void createAndShowGUI() {
		JFrame frame = new JFrame("Calculator");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		addComponentsToPane(frame.getContentPane());
		frame.pack();
		frame.setVisible(true);
	}
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				new Calculator().createAndShowGUI();
			}
		});
	}
}


用来设置GridBagConstraints的类如下:


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

public class GBC extends GridBagConstraints {
	/**
	 * 构造函数,用来设置组件所占单元格的坐标
	 * 
	 * @param gridx 横向坐标
	 * @param gridy 纵向坐标
	 */
	public GBC(int gridx, int gridy) {
		this.gridx = gridx;
		this.gridy = gridy;
	}

	/**
	 * 构造函数,用来设置组件所占单元格的坐标,同时指定宽度和高度
	 * @param gridx 横向坐标 
	 * @param gridy 纵向坐标
	 * @param gridwidth 组件宽度
	 * @param gridheight 组件高度
	 */
	public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
		this.gridx = gridx;
		this.gridy = gridy;
		this.gridwidth = gridwidth;
		this.gridheight = gridheight;
	}

	/**
	 * 当组件没有空间大时,设置组件的位置
	 * @param anchor 组建位置
	 * @return 当前对象
	 */
	public GBC setAnchor(int anchor) {
		this.anchor = anchor;
		return this;
	}

	/**
	 * 设置填充
	 * @param fill 设置填充方式
	 * @return 当前对象
	 */
	public GBC setFill(int fill) {
		this.fill = fill;
		return this;
	}

	/**
	 * 设置组件随窗口延伸的幅度
	 * @param weightx 横向延伸大小
	 * @param weighty 纵向延伸大小
	 * @return 当前对象
	 */
	public GBC setWeight(double weightx, double weighty) {
		this.weightx = weightx;
		this.weighty = weighty;
		return this;
	}

	/**
	 * 设置组件之间的间距
	 * @param distance 上下左右间距一样
	 * @return 当前对象
	 */
	public GBC setInsets(int distance) {
		this.insets = new Insets(distance, distance, distance, distance);
		return this;
	}

	/**
	 * 设置组件之间的间距
	 * @param top 上间距
	 * @param left 左间距
	 * @param bottom 底间距
	 * @param right 右间距
	 * @return 当前对象
	 */
	public GBC setInsets(int top, int left, int bottom, int right) {
		this.insets = new Insets(top, left, bottom, right);
		return this;
	}

	/**
	 * 设置组件内部填充空间,即给组件的最小高度或宽度添加多大的空间
	 * @param ipadx 横向填充
	 * @param ipady 纵向填充
	 * @return 当前对象
	 */
	public GBC setIpad(int ipadx, int ipady) {
		this.ipadx = ipadx;
		this.ipady = ipady;
		return this;
	}
}

  

 

转载于:https://www.cnblogs.com/superpunk/p/4534284.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GridBagLayoutJava 中一种强大的布局管理器,可以用来设计复杂的用户界面。下面是使用 GridBagLayout 布局管理器设计一个简单的计算器界面的示例代码: ```java import java.awt.*; import javax.swing.*; public class Calculator extends JFrame { private JTextField display; public Calculator() { setTitle("Calculator"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建 GridBagLayout 布局管理器 GridBagLayout layout = new GridBagLayout(); setLayout(layout); // 设置 GridBagConstraints 的默认值 GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.BOTH; constraints.weightx = 1.0; constraints.weighty = 1.0; // 创建显示文本框并添加到界面顶部 display = new JTextField(); display.setEditable(false); constraints.gridx = 0; constraints.gridy = 0; constraints.gridwidth = 4; add(display, constraints); // 创建数字按钮并添加到界面中间 String[] buttonLabels = {"7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "=", "/"}; JButton[] buttons = new JButton[buttonLabels.length]; for (int i = 0; i < buttonLabels.length; i++) { buttons[i] = new JButton(buttonLabels[i]); constraints.gridx = i % 4; constraints.gridy = i / 4 + 1; add(buttons[i], constraints); } // 设置界面大小并显示 setSize(300, 300); setVisible(true); } public static void main(String[] args) { new Calculator(); } } ``` 在上面的代码中,我们首先创建了一个 JFrame 对象,然后使用 GridBagLayout 布局管理器来布局计算器界面。我们将显示文本框和数字按钮都添加到 JFrame 中,并使用 GridBagConstraints 来指定它们的位置和大小。具体来说,我们设置了 fill、weightx 和 weighty 属性来控制组件的布局方式,设置了 gridx、gridy 和 gridwidth 属性来指定组件在网格中的位置和跨度。最后,我们设置了 JFrame 的大小并显示出来。 运行上面的代码,就可以看到一个简单的计算器界面了。你可以根据需要修改按钮的标签和布局方式,来实现更复杂的计算器功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值