java Swing框架应用,计算器的设计实现

本计算器的实现最基本的四则运算及开方、求倒数的功能。

计算器的基本框架使用java swing包中组件就行实现

需要用到的控件跟变量

<span style="white-space:pre">	</span>private JPanel jp1, jp2, jp3;//需要3个面板,一个放置文本框,一个放置复位、退格键,一个放置按钮组组件
	private JButton[] jButtons;//1~9数字跟四则运算符,开方运算符,求倒数运算符
	private JButton jb1, jb2, jb3;//退格按钮,复位按钮
	private JTextField jTextField;//显示文本框
	private JMenuBar jBar;//次要设置菜单功能(没有实现功能)
	private JMenu edit,show,help;
	private JMenuItem copy,niantie,biaozhun,science,math,net,about;
	
	private String flag;//当点击运算符是,临时标记运算符用
	private String aa = "";//拼接数字型字符串是所用
	private LinkedList<Object> text = new LinkedList<Object>();//存放点击的数字按钮时获得的数字用
	private double num1, num2, result;//运算时的变量
	private String[] num = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*",
			"%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };


主界面的组件代码:

public Calculator() {
		super();
		
		jBar = new JMenuBar();
		edit = new JMenu("编辑");
		jBar.add(edit);
		copy = new JMenuItem("复制");
		niantie = new JMenuItem("粘贴");
		edit.add(copy);
		edit.add(niantie);
		
		show = new JMenu("查看");
		jBar.add(show);
		help = new JMenu("帮助");
		jBar.add(help);
		setJMenuBar(jBar);
		
		jp1 = new JPanel();
		jTextField = new JTextField("0.", 16);
		jTextField.setHorizontalAlignment(JTextField.RIGHT);
		jTextField.setEditable(false);
		jp1.setLayout(new FlowLayout());
		jp1.add(jTextField);
		add(jp1);
		
		jp3 = new JPanel();
		jp3.setLayout(new FlowLayout());
		jb1 = new JButton("BackSpace");
		jb2 = new JButton("CE");
		jb3 = new JButton("C");
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		jb3.addActionListener(this);
		jp3.add(jb1);
		jp3.add(jb2);
		jp3.add(jb3);
		add(jp3);

		GridLayout GL = new GridLayout(4, 4, 3, 3);

		jp2 = new JPanel();
		jp2.setLayout(GL);
		jButtons = new JButton[20];
		for (int i = 0; i < num.length; i++) {
			jButtons[i] = new JButton(num[i]);<pre name="code" class="java"><span style="white-space:pre">			</span>jp2.add(jButtons[i]);
                 }add(jp2);
		setBounds(200, 200, 320, 270);
		setVisible(true);
		setResizable(false);
		setLayout(new FlowLayout());
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
	}
 



在for循环中对按钮就行事件监听

for (int i = 0; i < num.length; i++) {
			jButtons[i] = new JButton(num[i]);
//			jButtons[i].setPreferredSize(new Dimension(42,42));
			jp2.add(jButtons[i]);
			jButtons[i].addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					String tt = e.getActionCommand();
					if (tt.equals("+") || tt.equals("-") || tt.equals("*")
							|| tt.equals("/") || tt.equals("%")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							flag = tt;
							text.removeAll(text);
							jTextField.setText(flag);
						}
					} else if (tt.equals("=")) {
						num2 = Double.parseDouble(jTextField.getText()
								.toString());
						if (flag.equals("+")) {
							result = num1 + num2;
							jTextField.setText(result + "");
						} else if (flag.equals("-")) {
							if (num1 >= num2) {
								result = num1 - num2;
								jTextField.setText(result + "");
							} else {
								result = num2 - num1;
								jTextField.setText("-" + result);
							}
						} else if (flag.equals("*")) {
							result = num1 * num2;
							jTextField.setText(result + "");
						} else if (flag.equals("%")) {
							result = num1 % num2;
							jTextField.setText(result + "");
						} else {
							if (num2 != 0) {
								result = num1 / num2;
								jTextField.setText(result + "");
							} else {
								jTextField.setText("by zero");
							}
						}
					} else if (tt.equals("sqrt")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							result = Math.sqrt(num1);
							jTextField.setText(result + "");
						}
					} else if (tt.equals("1/x")) {
						if (!jTextField.equals("")) {
							num1 = Double.parseDouble(jTextField.getText()
									.toString());
							result = 1 / num1;
							;
							jTextField.setText(result + "");
						}
					}else {
						text.addFirst(tt);
						for (int j = 0; j < text.size(); j++) {
							aa = aa + text.get(j);
						}
						jTextField.setText(aa);
						aa = "";
					}
				}
			});
		}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值