简单计算器的Java实现
来源:互联网 发布:painter软件怎么样 编辑:程序博客网 时间:2024/05/16 08:33
/*本人自学Java一月有余,对Java语法简洁、OO、功能强大深有感触,
无奈平时总是编写课本上的小程序,无法获得真正的成就感;突然想编
一个小的计算器试试,不料知识储备不够,总是在一些细节问题上纠缠。
本程序涉及到正则表达式在split中的应用,无奈之下只好采用迂回战术。
先把*等特殊字符替换成其他字符后才用split,之后再换回来replace()*/
package caculator;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleCaculator extends JFrame {
//define component
private JButton jbtReminder = new JButton("%");
private JButton jbtClear = new JButton("CLR");
private JButton jbtAdd = new JButton("+");
private JButton jbtSubtract = new JButton("-");
private JButton jbtMultiply = new JButton("*");
private JButton jbtDivide = new JButton("/");
JButton[] jbtArray = new JButton[10];
private JButton jbtDot = new JButton(".");
private JButton jbtEqual = new JButton("=");
private JTextField jtfDisplay = new JTextField(25);
public SimpleCaculator(){
//The size of a button
Dimension d = new Dimension(100,40);
//The panel with three buttons,including one not enabled
JPanel panelCenter = new JPanel(new BorderLayout());
//set size
jbtReminder.setPreferredSize(d);
panelCenter.add(jbtReminder,BorderLayout.WEST);
JButton jbt = new JButton();
jbt.setEnabled(false);
panelCenter.add(jbt,BorderLayout.CENTER);
jbtClear.setPreferredSize(d);
panelCenter.add(jbtClear,BorderLayout.EAST);
//The panel with 4 operators
JPanel panelOperator = new JPanel(new GridLayout(4,1));
jbtAdd.setPreferredSize(d);
jbtSubtract.setPreferredSize(d);
jbtMultiply.setPreferredSize(d);
jbtDivide.setPreferredSize(d);
panelOperator.add(jbtAdd);
panelOperator.add(jbtSubtract);
panelOperator.add(jbtMultiply);
panelOperator.add(jbtDivide);
//The panel with all numbers and some operators
JPanel panelNumber = new JPanel(new GridLayout(4,3));
//Add the number buttons
for(int i = 0;i < 10;i++){
panelNumber.add(jbtArray[i] = new JButton((10 - i -1) + ""));
jbtArray[i].setPreferredSize(d);
}
//The dot and equal button
jbtDot.setPreferredSize(d);
jbtEqual.setPreferredSize(d);
panelNumber.add(jbtDot);
panelNumber.add(jbtEqual);
//The panel not contains the textfield
JPanel panelButton = new JPanel(new BorderLayout(3,3));
panelButton.add(panelCenter,BorderLayout.NORTH);
panelButton.add(panelOperator,BorderLayout.WEST);
panelButton.add(panelNumber,BorderLayout.CENTER);
//add to the frame
jtfDisplay.setHorizontalAlignment(JTextField.RIGHT);
add(jtfDisplay,BorderLayout.NORTH);
add(panelButton,BorderLayout.CENTER);
//Clear listener
jbtClear.addActionListener(new ClearListener());
//The string need to be displayed
jbtReminder.addActionListener(new ContentListener());
jbtAdd.addActionListener(new ContentListener());
jbtSubtract.addActionListener(new ContentListener());
jbtMultiply.addActionListener(new ContentListener());
jbtDivide.addActionListener(new ContentListener());
jbtDot.addActionListener(new ContentListener());
for(int i = 0;i < 10;i++){
jbtArray[i].addActionListener(new ContentListener());
}
//The equal operator listener
jbtEqual.addActionListener(new equalListener());
}
public static void main(String[] args){
SimpleCaculator frame = new SimpleCaculator();
frame.setTitle("Simple Caculator");
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
//Set the text null
private class ClearListener implements ActionListener {
public void actionPerformed(ActionEvent e){
jtfDisplay.setText(null);
}
}
//Append the string
private class ContentListener implements ActionListener {
public void actionPerformed(ActionEvent e){
String displayString = jtfDisplay.getText();
displayString += ((JButton)(e.getSource())).getText();
jtfDisplay.setText(displayString);
}
}
//Equal listener
private class equalListener implements ActionListener {
public void actionPerformed(ActionEvent e){
String displayString = jtfDisplay.getText();
//Modify the string to a proper format
String modifiedFirst;
if(displayString.indexOf('*') != -1){
modifiedFirst = displayString.replace('*',',');
}
else{
modifiedFirst = displayString;
}
String modifiedSecond;
if(displayString.indexOf('.') != -1){
modifiedSecond = modifiedFirst.replace('.','d');
}
else{
modifiedSecond = modifiedFirst;
}
String modifiedThird;
if(displayString.indexOf('-') != -1){
modifiedThird = modifiedSecond.replace('-',';');
}
else{
modifiedThird = modifiedSecond;
}
//Divide the string using regular expression
String[] numbersString = modifiedThird.split("[+;,/%]",0);
if(numbersString[0].indexOf('d') != -1){
numbersString[0] = numbersString[0].replace('d','.');
}
if(numbersString[1].indexOf('d') != -1){
numbersString[1] = numbersString[1].replace('d','.');
}
double result;
char operator = displayString.charAt(numbersString[0].length());
if(operator == ','){
operator = '*';
}
if(operator == ';'){
operator = '-';
}
//Get the result and show it
switch (operator){
case '+' : result = Double.parseDouble(numbersString[0]) + Double.parseDouble(numbersString[1]) ;
jtfDisplay.setText(String.valueOf(result));
break;
case '-' : result = Double.parseDouble(numbersString[0]) - Double.parseDouble(numbersString[1]) ;
jtfDisplay.setText(String.valueOf(result));
break;
case '*' : result = Double.parseDouble(numbersString[0]) * Double.parseDouble(numbersString[1]) ;
jtfDisplay.setText(String.valueOf(result));
break;
case '/' : result = Double.parseDouble(numbersString[0]) / Double.parseDouble(numbersString[1]) ;
jtfDisplay.setText(String.valueOf(result));
break;
case '%' :
//When you use this operator,the numbers should be integers
result = Integer.parseInt(numbersString[0]) % Integer.parseInt(numbersString[1]) ;
jtfDisplay.setText(String.valueOf((int)result));
break;
}
}
}
}
- 简单计算器的java实现
- java实现简单的计算器
- Java实现的简单计算器
- 简单计算器的Java实现
- 《java---简单计算器的实现》
- Java简单计算器的实现
- Java实现简单计算器
- 【Java】简单计算器实现
- JAVA实现简单计算器
- java实现简单计算器
- Java实现简单计算器
- java实现简单计算器
- 使用Java实现的简单的计算器
- Java实现简单的计算器(GUI编程)
- 用java实现的简单计算器
- 一个简单的Java计算器实现
- Java实现简单计算器的加减乘除功能
- Java swing实现简单计算器的开发
- c#实现用SQL池(多线程),定时批量执行SQL语句 (转)
- mysql存储过程
- 顶点属性寄存器(顶点程序)的书写方法
- C语言学习笔记(十)--指针
- linux 下软件安装的几种方法
- 简单计算器的Java实现
- MPEG2 TS小结
- 从DA转换器中看到了初中物理题
- WINDOWS XP sp2 Platfrom SDK下载地址
- 80x86的汇编器
- php中单引号与双引号的区别
- 信用卡外币欠款需提前设置 当心有钱还不了
- JAVA IO操作总结——节点流和处理流
- 有关CentOS6的man报错