首页 > 编程语言 >Java实验报告-计算器(AWT图形界面)

Java实验报告-计算器(AWT图形界面)

时间:2022-11-01 10:37:49浏览次数:44  
标签:RIGHTKEYS resultText 图形界面 AWT equals else resultNum key Java


 

一、实验目的

掌握图形用户界面的设计与实现。

二、实验内容

使用图形界面制作一个计算器并实现相应功能。

三、实验步骤

Java实验报告-计算器(AWT图形界面)_图形用户界面

public class firstapp extends Applet implements ActionListener {

private String[] LEFTKEYS = { "7", "8", "9", "4", "5", "6", "1", "2", "3", "0", "+/-", "." };

private String[] RIGHTKEYS = { "/", "sqrt", "ln", "*", "sin", "<-", "-", "cos", "CE", "+", "y^x", "=" };

private Button leftKeys[] = new Button[LEFTKEYS.length];

private Button rightKeys[] = new Button[RIGHTKEYS.length];

private TextField resultText = new TextField("0");



private double resultNum = 0.0;

private String operator = "=";

private boolean startInput = true;



public firstapp() {

init();

}



public void init() {

resultText.setEditable(false);

resultText.setBackground(Color.WHITE);

Panel leftPanel = new Panel();// 左边按钮

leftPanel.setLayout(new GridLayout(4, 3, 3, 3));

for (int i = 0; i < LEFTKEYS.length; i++) {

leftKeys[i] = new Button(LEFTKEYS[i]);

leftPanel.add(leftKeys[i]);

leftKeys[i].setForeground(Color.RED);

}

Panel rightPanel = new Panel();

rightPanel.setLayout(new GridLayout(4, 3, 3, 3));

for (int i = 0; i < RIGHTKEYS.length; i++) {

rightKeys[i] = new Button(RIGHTKEYS[i]);

rightPanel.add(rightKeys[i]);

rightKeys[i].setForeground(Color.blue);

}

this.setLayout(new BorderLayout());

this.add(resultText, BorderLayout.NORTH);

this.add(leftPanel, BorderLayout.WEST);

this.add(rightPanel, BorderLayout.EAST);



for (int i = 0; i < LEFTKEYS.length; i++) {

leftKeys[i].addActionListener(this);

}

for (int i = 0; i < RIGHTKEYS.length; i++) {

rightKeys[i].addActionListener(this);

}

}



public void actionPerformed(ActionEvent e) {

// TODO 自动生成的方法存根

String label = e.getActionCommand();

if (label.equals(RIGHTKEYS[8])) {

// 处理CE

resultText.setText("0");

startInput = true;

} else if (label.equals(RIGHTKEYS[5])) {

// 处理退格

handleBackSpace();

} else if ("0123456789.".indexOf(label) >= 0) {

// 处理数字n

handleNum(label);

} else {

// 处理运算符

handleOperate(label);

}

}



private void handleBackSpace() {

String text = resultText.getText();

int i = text.length();



text = text.substring(0, i - 1);

if (text.length() == 0) {

// 如果文本没有了内容,显示0

resultText.setText("0");

} else {

// 显示新的文本

resultText.setText(text);

}

}



private void handleNum(String key) {

if (startInput) {

if (key.equals(".")) {

resultText.setText(resultText.getText() + ".");

} else {

resultText.setText(key);

}

} else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)) {



resultText.setText(resultText.getText() + ".");

} else if (!key.equals(".")) {

resultText.setText(resultText.getText() + key);

}

startInput = false;

}



private void handleOperate(String key) {

if (key.equals(RIGHTKEYS[1]) || key.equals(RIGHTKEYS[2]) || key.equals(RIGHTKEYS[4]) || key.equals(RIGHTKEYS[7])

|| key.equals(LEFTKEYS[10])) {

if (key.equals(RIGHTKEYS[1])) { // 处理sqrt

if (getNumFromText() < 0.0) {

resultText.setText("小于0的数不能开方");

} else {

resultNum = Math.sqrt(getNumFromText());

}

}



if (key.equals(RIGHTKEYS[2])) { // 处理ln

if (getNumFromText() <= 0.0) {

resultText.setText("小于等于0的数不能求对数");

} else {

resultNum = Math.log(getNumFromText());

}

}

if (key.equals(RIGHTKEYS[4])) { // 处理sin

resultNum = Math.sin(getNumFromText());

}



if (key.equals(RIGHTKEYS[7])) { // 处理cos

resultNum = Math.cos(getNumFromText());

}

if (key.equals(LEFTKEYS[10])) { // 处理+/-

resultNum = getNumFromText() * (-1);

}

resultText.setText(String.valueOf(resultNum));

startInput = true;

}



else {

if (operator.equals("/")) {

// 除

if (resultText.getText().equals("0")) {

resultText.setText("除数不能为零");

} else {

resultNum /= getNumFromText();

}

} else if (operator.equals("+")) {

// 加

resultNum += getNumFromText();

} else if (operator.equals("-")) {

// 减

resultNum -= getNumFromText();

} else if (operator.equals("*")) {

// 乘

resultNum *= getNumFromText();

} else if (operator.equals("=")) {

// 赋值

resultNum = getNumFromText();

} else if (operator.equals("y^x")) {

// pow

resultNum = Math.pow(resultNum, getNumFromText());

}

resultText.setText(String.valueOf(resultNum));

operator = key;

startInput = true;

}

}



private double getNumFromText() {

double textDouble;

textDouble = Double.valueOf(resultText.getText()).doubleValue();

return textDouble;

}



public static void main(String args[]) {

firstapp firstapp1 = new firstapp();

firstapp1.setVisible(true);

}

}

四、实验总结

本次实验使我学会了如何实现图形用户界面,知道了awt各组件的相关参数、窗口的布局等相关知识。明白了接口的定义及其实现方法,了解了JAVA的事件及处理机制,学会了事件监听者类的使用。现在,我能够写出一些简单的图形用户界面程序了。

标签:RIGHTKEYS,resultText,图形界面,AWT,equals,else,resultNum,key,Java
From: https://blog.51cto.com/u_15847108/5811958

相关文章

  • Java实验报告--计时器(线程)
    一、实验目的了解Java线程的使用方法二、实验内容1、使用多线程制作一计时器,要求实现文本框输入一个时间(分),计时结束后提示。2、系统通过点击按钮可实现启动计时、暂停、结束......
  • Java的基本使用
    两个部分:一是理论、二是实践;这里的Java讲解来源于2010年之前,之后的改变看官网。一、Java的基本概念1Java发展历史由sun(Stanforduniversitynetwork)开发,1982年2月成立,2009年......
  • 设计模式-模板模式在Java中的使用示例
    场景模板模式模板模式又叫模板方法模式(TemplateMethodPattern),是指定义一个算法的骨架,并允许子类为一个或者多个步骤提供实现。模板模式使得子类可以在不改变算法......
  • Java解析cron表达式
    概述Cron表达式是一个字符串,以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,即两种语法格式:SecondsMinutesHoursDayofMonthMonthDayofWeekYear,即:秒分时天月星......
  • Java8学习笔记
    Java8引入函数式编程,好处:代码简洁,意图明确,使用stream接口而不是for循环。多核友好,parallel()方法。相关知识高阶函数高阶函数就是接收函数参数的函数,能够根据传入的函数参......
  • Java学习之位运算(操作)总结
    最近在反思工作第四年的深度,故而写此系列。其他Java系列文章:​​Java学习之编译、反编译以及字节码入门​​​​Java学习之String​​​​Java学习之JDK9新特性​​位操作,......
  • Java学习之NoClassDefFoundError、ClassNotFoundException、NoSuchMethodError
    在菜逼如我短短的三年职业编码生涯中,无数次遇到这两个异常,故而总结一下。Java异常体系大致提一些,不是本文的重点。两者都是标准异常,平时碰到最多的是ClassNotFoundExceptio......
  • Java学习之String
    概述写在前面,工作第四年,重新把基础抓起来吧。String可以说是JDK中最基础的一个类。就记录一些日常开发中最常用的方法。String类是非可变类,其对象一旦创建,就不可销毁。Strin......
  • Java学习之JDK9新特性
    写在前面:现在(2019-01-12)绝大多数的公司或者个人都在使用JDK8,这一点毋庸置疑,但是不排除那些需要自我反省一下的落后者还在使用JDK5~7。毕竟JDK12都出来了。参考​​​JDK12......
  • 面试之基础算法题:求一个数字在给定的已排序数组中出现的起始、终止索引号(Java版)
    题目给定一个升序的整数数组,查找某一个值在数组中出现的索引号,例如,输入数组​​[2,3,3,4,4,5]​​​;查找的数是3,则返回​​[1,2]​​。时间复杂度要求为O(logN)。思路......