博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用GridBagLayout实现的计算器UI
阅读量:5119 次
发布时间:2019-06-13

本文共 3466 字,大约阅读时间需要 11 分钟。

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

你可能感兴趣的文章
C# 类(10) 抽象类.
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
jvm参数
查看>>
我对前端MVC的理解
查看>>
Silverlight实用窍门系列:19.Silverlight调用webservice上传多个文件【附带源码实例】...
查看>>
2016.3.31考试心得
查看>>
mmap和MappedByteBuffer
查看>>
Linux的基本操作
查看>>
转-求解最大连续子数组的算法
查看>>
对数器的使用
查看>>
【ASP.NET】演绎GridView基本操作事件
查看>>
ubuntu无法解析主机错误与解决的方法
查看>>
尚学堂Java面试题整理
查看>>
MySQL表的四种分区类型
查看>>
[BZOJ 3489] A simple rmq problem 【可持久化树套树】
查看>>
STM32单片机使用注意事项
查看>>
swing入门教程
查看>>
好莱坞十大导演排名及其代表作,你看过多少?
查看>>
Loj #139
查看>>
hihocoder1187 Divisors
查看>>