问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用java编写计算器,怎样把标签加入加到JFrame上(用GridBagLayout布局管理器)

发布网友 发布时间:2022-04-07 19:31

我来回答

3个回答

懂视网 时间:2022-04-07 23:52

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;
	}
}

  

 

使用GridBagLayout实现的计算器UI

标签:

热心网友 时间:2022-04-07 21:00

JLabel jLabel= new JLabel();
jLabel.setText("jLabel");
GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;//确定列,0开始表示第一列
gridBagConstraints.gridy = 1;//确定行
add(jLabel, gridBagConstraints);

因为是GridBagLayout布局,所以用GridBagConstraints 的gridx确定X坐标,也就是列的位置
用gridy确定y坐标,也就是行的位置,然后加到JFrame里面去就可以了。。。

希望能帮到你。。。仍有问题可以直接hi我。。。。

热心网友 时间:2022-04-07 22:18

这个你到网上一搜一大把
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 访问好友的人人主页一次就会留下痕迹吗? 横拍打法能不能用直拍乒乓球拍? 直拍改横拍 横拍当直拍用好吗? 乒乓球直拍握拍不知道该不该改横排 我姿势错的地方就是一击球是 撇了~下面的有图 能改不? 抓正我很辛苦~ 电蚊拍变压器部分三极管温度很高是什么原因? 乒乓球直板改横板问题 横排和直拍什么区别 win7笔记本很卡怎么办 win7笔记本卡慢的处理办法 怎么练直拍横打 直拍改横拍难不难 乒乓球拍什么是直拍,什么是横排? 从理论上来说,直拍可以改装横拍吗? 为什么笔记本电脑可以连上手机热点连不上家里wifi? 电蚊拍电路部分问题 电蚊拍电路可以改升压电路吗? 电脑无线网怎么修改密码 剖腹产多久肚子变平? 电蚊拍三极管是什么型号 吃完流产药后需要吃头孢药吗 举例说明中外合资经营企业的项目申请、可行性研究报告、协议、章程与合同是什么关系 为什么还要写可行性研究报告 济南如何注册商标,要多少费用,在哪里办理 坐标济南,想注册一个服装类的商标,请问需要走哪些流程?麻不麻烦? 济南商标注册流程是怎样的? 济南商标注册代理机构哪家好 自己过生日唱给自己什么歌呢 梦见包子,菜卷,但是我没吃 今天2010年10月15号,是我小楠楠的13岁生日,有什么给自己的好听的生日歌呢?帮忙说说 想给儿子取个三个字的名字,姓陈,想带一昊字,陈_昊或者陈昊_。希望组合有一定的意义就好,如果能有一种... 昊恩,男,英文名怎么拼~ 梁昊恩这名字好听吗 汽车上SET是啥意思 有一首歌,其中一句歌词是“祝我生日快乐……”是哪首? 姓葛的男孩或女孩的姓名 大众set按钮有什么用? 昊恩家家的《迷路》 歌词 一个圆圈里面一个这个字母a怎么打 一个圆圈里面有a的怎么打 一个圆圈里有一个a,那个怎么打?