实验四 GUI实验

注意

完整实验报告及源码:https://download.csdn.net/download/qq_29711355/85640627

一、实验目的:

练习面向对象的图形用户界面设计、界面布局、事件设计方
法。

二、实验内容:

设计一个类似Windows计算器的Application应用程序。

三、实验要求:

1、采用Java Application方式建立应用程序框架;
2、仿照Windows计算器,利用多种布局方式实现界面设计;
3、完成简单的整数加、减、乘、除运算。

四、实验报告内容要求:

1、简要分析Java Application方式建立的应用程序框架的
执行过程;
2、简要分析Windows计算器的布局拆分思路;
3、完整介绍整数加、减、乘、除运算的实现思想和具体设
计实现过程。
4、简要说明你在该实验中的收获与体会。

参考代码

Calculator 类

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FocusTraversalPolicy;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Locale;
import java.util.function.DoublePredicate;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class Calculator extends JFrame{
	public Calculator() {
		this.init();
		this.loadNorth();
		this.loadCenter();
	}
	
	private void init() {
		setLayout(new BorderLayout());
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setResizable(false);
		setSize(new Dimension(300,400));
		this.add(jPanelNorth,BorderLayout.NORTH);
		this.add(jPanelCenter,BorderLayout.CENTER);
	}
	
	//设置北面的JTextFiled
	private JPanel jPanelNorth = new JPanel();
	private JTextField jTextField = new JTextField();
	private JButton btn_clear = new JButton("C");
	MyActionListener myActionListener = new MyActionListener();
	private void loadNorth() {
		jTextField.setPreferredSize(new Dimension(220,40));
		jPanelNorth.add(jTextField);
		jPanelNorth.add(btn_clear);
		btn_clear.addActionListener(myActionListener);
		
	}
	
	//除清除键以外的按键部分
	private JPanel jPanelCenter = new JPanel();
	private void loadCenter() {
		jPanelCenter.setLayout(new GridLayout(4,4));
		String btn_text = "789/456*123-0.=+";
		for (int i = 0; i < 16; i++) {
			String temp = btn_text.substring(i, i+1);
			JButton btn_center = new JButton(temp);
			jPanelCenter.add(btn_center);
			btn_center.addActionListener(myActionListener);
		}
		
	}
	
	//按键监听类
	public class MyActionListener implements ActionListener{
		private Double a = null;
		private String symbol = null;
		private boolean whether = false;
		@Override
		public void actionPerformed(ActionEvent e) {
			String click = e.getActionCommand();
			if (whether) {
				jTextField.setText("");
				whether = false;
			}
			if (".0123456789".indexOf(click) != -1) {
				jTextField.setText(jTextField.getText() + click);
			}else if ("//+//-*/".indexOf(click) != -1) {
				a = Double.parseDouble(jTextField.getText());
				symbol = click;
				jTextField.setText("");
			}else if (click.equals("=")) {
				if (symbol.equals("/") && jTextField.getText().equals("") || Double.parseDouble(jTextField.getText()) == 0.0) {
					JOptionPane.showMessageDialog(null, "0不能作为除数","注意",JOptionPane.ERROR_MESSAGE);
				}else if (symbol != null) {
					switch (symbol) {
					case "+":
						a += Double.parseDouble(jTextField.getText());
						break;
					case "-":
						a -= Double.parseDouble(jTextField.getText());
						break;
					case "*":
						a *= Double.parseDouble(jTextField.getText());
						break;
					case "/":
						a /= Double.parseDouble(jTextField.getText());
						break;
					default:
						break;
					}
				}
				jTextField.setText(a.toString());
				whether = true;
				
			}else if (click.equals("C")) {
				a = null;
				jTextField.setText("");
			}
			System.out.println("点击了:" + click + "  " +a);
		}
		
	}
}

Test 类

public class Test {
	public static void main(String[] args) {
		new Calculator();
	}
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无奈清风吹过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值