Java语言综合设计实验报告
--GUI编程
设计题目: JAVA
班级: 过072班
学号: 070483 姓名: 许正贤 成绩:
2009年 6月 23日
计算器
一、 程序功能简介
具有日常计算的大部分功能:
1,能够正确的进行加减乘除运算;
2,能够进行数学计算,例如sin(),cos(),tan()等等; 3,能够进行数据存储;
说明:完全模仿Windows自带的计算器所写,但有些功能还需完善。
二、 算法设计
设计了一个类,整个界面设计用到了两个布局管理器,分别是BorderLayout和FlowLayout。
程序中用到了setBackground和setHorizontalAlignment等多个函数,形成了一个比较不错的windows的窗体外观,除此之外还用到了:JFrame类中的JPanel,JLabel,JComboBox,…用了大量类库中的函数实现了很多功能。
三、 源程序代码及注释
/*
* @author XuZhengXian */
import java.awt.*;
import java.awt.event.*; import javax.swing.*;
import java.text.DecimalFormat;
public class MyCalculator implements ActionListener {
// 设计面板中的单位 JFrame frame;
JTextField textAnswer, textMemory; JLabel label;
JPanel panel, panel1, panel2, panel3; JMenuBar menuBar; JMenu editMenu;
JMenuItem copyItem, pasteItem;
JLabel labelSpace; // 控制面板的形状 JButton buttonBS, buttonCE, buttonC; JButton button[];
JButton buttonMC, buttonMR, buttonMS, buttonMAdd;
JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul,
buttonDiv, buttonEqual;
JButton buttonSin, buttonCos, buttonTan, buttonPI, buttonXY, buttonX2, buttonSqrt, buttonDS;
DecimalFormat df; // 设置数据输出精度 boolean clickable; // 控制当前能否按键 double memoryd; // 使用内存中存储的数字 int memoryi;
boolean resultIndicate, dotFlag;
double vard, answerd; // 用来保存double型数据的中间值和最后结果 short key = -1, prekey = -1; // 用来保存当前进行何种运算和保存前次进行何种运算
String copy; 度
// 构造函数
public MyCalculator() { clickable = true; answerd = 0;
frame = new JFrame(\计算器\);
df = new DecimalFormat(\); // 设置数据输出精textAnswer = new JTextField(15); textAnswer.setText(\);
textAnswer.setEditable(false);
textAnswer.setBackground(new Color(255, 255, 255)); textAnswer.setHorizontalAlignment(JTextField.RIGHT); panel = new JPanel();
frame.getContentPane().add(panel); panel1 = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BorderLayout()); // 设计整个面板
menuBar = new JMenuBar();
editMenu = new JMenu(\编辑\);
copyItem = new JMenuItem(\复制\); copyItem.addActionListener(this); pasteItem = new JMenuItem(\粘贴\); pasteItem.addActionListener(this); editMenu.add(copyItem); editMenu.add(pasteItem); menuBar.add(editMenu);
panel.add(menuBar, BorderLayout.NORTH);
panel.add(textAnswer, BorderLayout.CENTER); panel.add(panel1, BorderLayout.SOUTH); panel1.setLayout(new BorderLayout());
label = new JLabel(\过072 许正贤 070483\); textMemory = new JTextField(5); textMemory.setEditable(false);
textMemory.setBackground(new Color(217, 217, 217)); labelSpace = new JLabel(\);
buttonBS = new JButton(\);
buttonBS.setForeground(new Color(255, 0, 0)); buttonCE = new JButton(\);
buttonCE.setForeground(new Color(255, 0, 0)); buttonC = new JButton(\);
buttonC.setForeground(new Color(255, 0, 0)); buttonBS.addActionListener(this); buttonCE.addActionListener(this); buttonC.addActionListener(this);
panel1.add(panel2, BorderLayout.NORTH);
panel2.setLayout(new FlowLayout(FlowLayout.RIGHT)); panel2.add(label);
label.setHorizontalAlignment(JLabel.CENTER); panel2.add(textMemory); panel2.add(labelSpace); panel2.add(buttonBS); panel2.add(buttonCE); panel2.add(buttonC); panel3 = new JPanel();
panel1.add(panel3, BorderLayout.CENTER); button = new JButton[10];
for (int i = 0; i < button.length; i++) {
button[i] = new JButton(Integer.toString(i));
button[i].setForeground(new Color(0, 0, 255)); }
buttonMC = new JButton(\);
buttonMC.setForeground(new Color(255, 0, 0)); buttonMR = new JButton(\);
buttonMR.setForeground(new Color(255, 0, 0)); buttonMS = new JButton(\);
buttonMS.setForeground(new Color(255, 0, 0)); buttonMAdd = new JButton(\);
buttonMAdd.setForeground(new Color(255, 0, 0)); buttonDot = new JButton(\);
buttonDot.setForeground(new Color(0, 0, 255)); buttonAddAndSub = new JButton(\);
buttonAddAndSub.setForeground(new Color(0, 0, 255)); buttonAdd = new JButton(\);
buttonAdd.setForeground(new Color(255, 0, 0)); buttonSub = new JButton(\);
buttonSub.setForeground(new Color(255, 0, 0)); buttonMul = new JButton(\);
buttonMul.setForeground(new Color(255, 0, 0)); buttonDiv = new JButton(\);
buttonDiv.setForeground(new Color(255, 0, 0)); buttonSin = new JButton(\);
buttonSin.setForeground(new Color(12, 150, 50)); buttonCos = new JButton(\);
buttonCos.setForeground(new Color(12, 150, 50)); buttonTan = new JButton(\);
buttonTan.setForeground(new Color(12, 150, 50)); buttonEqual = new JButton(\);
buttonEqual.setForeground(new Color(255, 0, 0)); buttonPI = new JButton(\);
buttonPI.setForeground(new Color(12, 150, 50)); buttonX2 = new JButton(\);
buttonX2.setForeground(new Color(12, 150, 50)); buttonSqrt = new JButton(\);
buttonSqrt.setForeground(new Color(12, 150, 50)); buttonDS = new JButton(\);
buttonDS.setForeground(new Color(12, 150, 50)); // 将所有行为与监听绑定
panel3.setLayout(new GridLayout(4, 7)); panel3.add(buttonMC);
buttonMC.addActionListener(this); panel3.add(button[7]);
button[7].addActionListener(this);