您的位置:首页 > 编程语言 > Java开发

Java实战项目__简易计算器

2017-10-31 18:54 330 查看

java小项目 ------计算器

GUI初步编程:
主要是显示一个窗口,
堆积一些基本组件
处理基本事件

主类代码:

package Display_Interface;

import java.awt.Color;
public class Main_interface
{
public static void main(String [] args)
{
//为了更好的体现封装的特点,文本框和按钮的监视器应该分别封装
//菜单栏,待完善
Windows win = new Windows();
win.setBounds(300, 20, 360, 680);
win.getContentPane().setBackground(Color.LIGHT_GRAY);
//如果对象直接调用setBackground()更改的是框架的颜色
}
}


界面类:

package Display_Interface;

//其他功能,菜单中单位转化,一个显示即是时间的面板
import java.awt.event.*;
import javax.swing.*;
import java.util.StringTokenizer;

@SuppressWarnings("serial")
public class Windows extends JFrame
{
//用于计算和数据处理
String s1 = "",s2 = "";						//暂时存放从文本框获取的字符串,用于转换成数字
int tmp = 0;								//控制文本框追加选择,默认为0,获得字符后重置为1,追加到第三个文本框
double finalAnswer = 0.0;					//最终答案,用于输出到textarea[0]
String symbol="";						    //获得的运算符的字符串
char operator[];   			                //控制获得的运算符
Double getNum[];							//从输入的字符串中逐一提取数字

//组件
JLabel label[] = new JLabel[2];     		//标签
JMenuBar menubar;                   		//菜单条
JMenu menu[] = new JMenu[5];        		//创建长度为5菜单数组
JButton button[] = new JButton[17]; 		//创建动作按钮动作
JTextArea  textarea[] = new JTextArea[4];   //文本区域

//构造方法,初始化窗口
public Windows()
{
setLayout(null);                      		   //自定义布局
set_TextArea();								   //文本区域
set_Button();                        		   //按钮布局
set_Label();                        		   //标签布局
set_Menu();                      			   //菜单选项
init_Listener();							   //注册监视器
setTitle("Calculator");       			       //设置标题
setVisible(true);                			   //设置可见
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口操作
}

// 为按钮,键盘,等号键注册相应监视器
void init_Listener()
{
//为数字按钮注册监视器
System.out.println(finalAnswer);
for (int i = 1; i <= 10; i++)
button[i].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
getNum = new Double[2];
if(tmp == 0)
{
textarea[0].append(e.getActionCommand());
s1 +=  e.getActionCommand();
}

if(tmp == 1)
{
textarea[2].append(e.getActionCommand());
s2 +=  e.getActionCommand();
}
}
});
//创建两个文本框,在两个文本框中间键入一个新的文本框 ,用于获得运算符,
//处理时,先将两个数字文本框获取的数字存入浮点型的数组中,然后将字符文本框中获得的字符存入字符
//operator中,使用switch语句,将四种情况分别处理
//缺点:不能进行多位数的操作,以及多位数数字的复合运算
//其他功能,单位转换,求一元二次函数的结果
//另外
//添加一个新的面板,用于显示当前的时间,实时刷新,调用多线程.

// 为等号创建单独的监视器
button[16].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//获得存放运算符号的字符数组
operator = symbol.toCharArray();
//获得数字
getNum[0] = Double.valueOf(s1);
getNum[1] = Double.valueOf(s2);
System.out.println("getNum[0] = "+getNum[0]+"\ngetNum[1] = "+getNum[1]);
//debug过程,在case语句中忘记加break语句
switch(operator[0])
{
case '+':
{
finalAnswer = getNum[0]+getNum[1];
break;
}
case '-':
{
finalAnswer = getNum[0]-getNum[1];
break;
}
case '×':
{
finalAnswer = getNum[0]*getNum[1];
break;
}
case '÷':
{
finalAnswer = getNum[0]/getNum[1];
break;
}
}
System.out.println("finalAnswer = "+finalAnswer);
textarea[3].append(String.valueOf(finalAnswer));
}
});

// 为AC创建监视器
button[0].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//清空文本框
textarea[0].setText(null);
textarea[1].setText(null);
textarea[2].setText(null);
textarea[3].setText(null);
//运算符重置
symbol = "";
//将tmp置于0,再次追加字符时,置于textarea[0]
tmp = 0;
//将从文本框中获取的数字重置为0
s1 = "";
s2 = "";
System.out.println("重置后getNum[0] = "+getNum[0]+"\ngetNum[1] = "+getNum[1]);
}
});

// 为运算符创建监视器
//特殊处理,若两次点击加号或者两个数字重置问题
for (int i=11; i<=14; i++)
{
button[i].addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
//symbol字符串中只保存最后一次点击的运算符
//因此每次处理事件时,都将symbol字符串重置为空
symbol = "";
symbol  = e.getActionCommand();
//显示的操作符只能有一个,因此每次都重置为null
textarea[1].setText(null);
textarea[1].append(e.getActionCommand());
//将运算符存入字符数组中
operator = symbol.toCharArray();
tmp = 1;
}
});
}
}

//内部类,从键盘获取字符
class Key_listener implements KeyListener,FocusListener
{
public void keyPressed(KeyEvent e) {
textarea[0]=(JTextArea)e.getSource();
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void focusGained(FocusEvent e)
{
textarea[0]=(JTextArea)e.getSource();
}
public void focusLost(FocusEvent e){}
}

//设置文本框,用于显示结果和过程
void set_TextArea()
{
//文本区初始化,并将文本加入到面板
textarea[0] = new JTextArea(9,10);
textarea[1] = new JTextArea(9,10);
textarea[2] = new JTextArea(9,10);
textarea[3] = new JTextArea(9,10);
add(textarea[0]);
add(textarea[1]);
add(textarea[2]);
add(textarea[3]);
//文本区设置位置
textarea[0].setBounds(20, 60, 70, 30);//第一个操作数
textarea[1].setBounds(120, 60, 40, 30);//运算符
textarea[2].setBounds(190, 60, 70, 30);//第二个操作数
textarea[3].setBounds(20, 140, 300, 30);//显示运算结果
}

//嵌入菜单栏,菜单项
void set_Menu()
{
menubar = new JMenuBar();
add(menubar);
menu[0] = new JMenu("菜单一");
menu[1] = new JMenu("菜单二");
menu[2] = new JMenu("菜单三");
menu[3] = new JMenu("菜单四");
menu[4] = new JMenu("菜单五");
for(int i = 0; i < 5; i++)
menubar.add(menu[i]);
setJMenuBar(menubar);//将菜单添加到面板
}

//设置标签,安排布局
void set_Label()
{
//标签初始化
label[0] = new JLabel("运算过程:");
label[1] = new JLabel("运算结果:");
//将标签添加到底层容器
for(int i = 0; i < 2; i++)
{
add(label[i]);
}
//标签的布局
label[0].setBounds(20, 20, 65, 30);
label[1].setBounds(20, 100, 65, 30);
}

//添加按钮,安排布局
void set_Button()
{

button[0] = new JButton("AC");
button[0].setBounds(20, 220, 140, 60);//ac

button[1] = new JButton("7");
button[2] = new JButton("8");
button[3] = new JButton("9");
button[1].setBounds(20, 300, 60, 60);//7
button[2].setBounds(100, 300, 60, 60);//8
button[3].setBounds(180, 300, 60, 60);//9

button[4] = new JButton("4");
button[5] = new JButton("5");
button[6] = new JButton("6");
button[4].setBounds(20, 380, 60, 60);
button[5].setBounds(100, 380, 60, 60);
button[6].setBounds(180, 380, 60, 60);

button[7] = new JButton("1");
button
4000
[8] = new JButton("2");
button[9] = new JButton("3");
button[7].setBounds(20, 460, 60, 60);
button[8].setBounds(100, 460, 60, 60);
button[9].setBounds(180, 460, 60, 60);

button[10] = new JButton("0");
button[10].setBounds(20, 540, 140, 60);

button[11] = new JButton("+");
button[12] = new JButton("-");
button[13] = new JButton("×");
button[14] = new JButton("÷");
button[11].setBounds(260, 220, 60, 60);
button[12].setBounds(260, 300, 60, 60);
button[13].setBounds(260, 380, 60, 60);
button[14].setBounds(260, 460, 60, 60);

button[15] = new JButton(".");
button[16] = new JButton("=");
button[15].setBounds(180, 540, 60, 60);
button[16].setBounds(260, 540, 60, 60);

//将按钮加入到容器
for (int i = 0; i < 17; i++)
{
add(button[i]);
}
}

}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息