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

用java编写计算器 能够实现简单的加、减、乘、除、乘方、开方运算等;

发布网友 发布时间: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

//注意,没有考虑*/和+-的优先级。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Calculator3 extends JFrame implements ActionListener {
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者

public Calculator3() {
setTitle("Calculator");
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '?';
// 初始化窗口变量
operation = new JTextField("0");
operation.setEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton(".");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("*");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
changePN = new JButton("±");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane().setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}

// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == clear) {
operation.setText("0");
dotExist = false;
storedNumber = 0;
lastOperator = '?';
} else if (btn == equal) {
operate('=');
equaled = true;
} else if (btn == plus) {
operate('+');
equaled = false;
} else if (btn == minus) {
operate('-');
equaled = false;
} else if (btn == multi) {
operate('*');
equaled = false;
} else if (btn == div) {
operate('/');
equaled = false;
} else if (btn == changePN) {
operate('p');
operate('=');
equaled = true;
} else if (btn == sqrt) {
operate('s');
operate('=');
equaled = true;
} else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operation.getText().equals("0"))
operation.setText("" + i);
else if (!operated)
operation.setText(operation.getText() + i);
else {
operation.setText("" + i);
operated = false;
}
}
if (btn == dot && !dotExist) {
operation.setText(operation.getText() + ".");
dotExist = true;
}
}
}

// 进行运算的方法
private void operate(char operator) {
double currentNumber = Double.valueOf(operation.getText())
.doubleValue();
if (lastOperator == '?')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '*')
storedNumber *= currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber *= -1;
else if (lastOperator == 's')
storedNumber = Math.sqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operation.setText("" + storedNumber);
operated = true;
lastOperator = operator;
}

// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component,
int row, int col, int width, int height) {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height;
layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component).addActionListener(this);
getContentPane().add(component);
}

// 主方法初始化并显示窗口
public static void main(String[] args) {
Calculator3 calc = new Calculator3();
calc.setSize(290, 400);
calc.setVisible(true);
}
}

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

这个不错呢:
http://zhidao.baidu.com/question/99078202.html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
京珠高速与连霍高速的比较?(各个方面~) 请问在衡阳衡东107国道往京珠高度的交叉路口下车后怎么去武广高铁?有... 衡炎高速公路简介 请新领导吃饭高情商开场白 公司上了黑名单后,注册过的商标还能用吗 ...配 卡其色牛仔裤的话好看么? 如果好看,鞋子应该配什么颜色呢_百度知 ... 我室友很喜欢我该怎么办 cf巨人城废墟第31关怎么打才能刷过去 巨大城废墟31关怎么打? 困难巨人城废墟31关怎么关? 联通高清语音要开通收费么,怎么开通吗? 高清语音通话怎么办理? 联通卡怎么开高清通话? 河南联通volte怎么开通 裤子上滴上指甲油怎么洗掉? 裤子染上指甲油怎么办 裤子上沾到了指甲油用水冲一下变硬了。不用洗甲水洗掉。还有其他方法 指甲油弄裤子上了 怎么办? 裤子上的指甲油怎么洗掉? 弄到裤子的指甲油怎么洗掉? 餐饮卫生许可证在哪里办理 小型餐饮营业执照办理流程 餐饮经营许可证在哪里办理 农村信用社本金3万逾期四年要还多少钱? 我欠各银行信用卡总本金15万四年多,现无力偿还,要坐牢吗?去你被抓 opporeno6多大尺寸 我欠各银行信用卡总本金15万四年多,现无力偿还,要坐牢吗? opporeno6 尺寸 工商银行长龙信用卡逾期4年了,怎样还款? 欠银行5万逾期4年要还多少 1至100的初中乘方表规律 幂的乘方都有怎样的规律 乘方规律题简便方法 1~9这九个数字的乘方所得的结果,其个位数字是有规律的 袁天罡秤骨表 袁天罡称骨准确吗? 我是阴历八七年六月十七早晨起来出生的 请帮我算算我的八字和名字好吗?? 袁天罡称骨算命女版 用袁天罡称骨歌解这个日期 唐朝袁天罡的称骨算命法为何在民间传播广泛? 请问袁天罡称骨算命准确吗? 袁天罡称骨算命法,请高人帮我算算与男友的未来 妻宫有硬 袁天罡八字称骨算命 袁天罡称骨算命歌的具体解释,翻译成白话文(高手进!) 袁天罡称骨算命,四两九钱解释是古文看不懂。请翻译。尽详? 袁天罡写了一本书是什吗??谁能看懂他?? 命书上说的是真是假 我的生日是农历1982年8月初三晚上8点出生,有没有高人帮我算算八字如;称骨能称多重,够不够重 iPhone7相机快门声音设置在哪里?为什么我的相机在打开声音的状态...