預(yù)想計(jì)算器圖為:
簡易計(jì)算器
如何實(shí)現(xiàn)?
1.畫出計(jì)算器框架圖
2.設(shè)置button的監(jiān)聽事件,在監(jiān)聽中實(shí)現(xiàn)將值傳入到JTextField面板上,并在觸發(fā)“+”等預(yù)算符時(shí)實(shí)現(xiàn)運(yùn)算
貼上代碼畫框代碼 用Java里的swing和awt
import javax.swing.*;
import java.awt.*;
public class CaculatorWindow extends JFrame {
private final String names[] = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
private JTextField textField;
CaculatorWindow() {
textField = new JTextField();
GridLayout gridLayout = new GridLayout(4, 4);
JPanel panel = new JPanel();//定義計(jì)算器下方面板
panel.setLayout(gridLayout);
JButton[] buttons = new JButton[names.length];
for (int count = 0; count < names.length; count++) {
buttons[count] = new JButton(names[count]);
panel.add(buttons[count]);
}
//設(shè)置文本框位于窗體NORTH位置
getContentPane().add(textField,BorderLayout.NORTH);
//將面板放置在窗體CENTER位置
getContentPane().add(panel,BorderLayout.CENTER);
this.setTitle("Caculator");
this.setBounds(80,80,300,200);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new CaculatorWindow();
}
}
再貼上實(shí)現(xiàn)監(jiān)聽和運(yùn)算過程代碼
//數(shù)字按鈕的響應(yīng)事件
class NumButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
JButton object = (JButton)event.getSource();
char jButtonName = object.getText().charAt(0);
switch (jButtonName){
default:
setTextField(jButtonName);
break;
}
}
void setTextField(char jButttonName){
textField.setText(textField.getText()+String.valueOf(jButttonName));//使得之前textField上的字不會被覆蓋
}
}
//加減乘除等于的響應(yīng)事件
class opeButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String command = event.getActionCommand();
if(command.equals("+")){
temp = Double.parseDouble(textField.getText()); //用于保存運(yùn)算符號前一個數(shù)字
textField.setText("");
select = 1;
}
if(command.equals("-")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 2;
}
if(command.equals("*")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 3;
}
if(command.equals("/")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 4;
}
//在 = 處進(jìn)行+-*/事件處理
if(command.equals("=")){
switch (select){
case 1:
number = Double.parseDouble(textField.getText());//用于保存運(yùn)算符號后一個數(shù)字
textField.setText((temp+number)+"");
break;
case 2:
number = Double.parseDouble(textField.getText());
textField.setText((temp-number)+"");
break;
case 3:
number = Double.parseDouble(textField.getText());
textField.setText((temp*number)+"");
break;
case 4:
number = Double.parseDouble(textField.getText());
textField.setText((temp/number)+"");
break;
}
}
}
}
NumButtonHandler numButtonHandler = new NumButtonHandler();
for (int count = 0; count < names.length; count++) {
if(count == 3 || count == 7 || count == 11 || count == 14 || count == 15)
buttons[count].addActionListener(new opeButtonHandler());
else
buttons[count].addActionListener(numButtonHandler);
}
貼上完整代碼
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CaculatorWindow extends JFrame {
private final String names[] = {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
private JTextField textField;
private int select = 0;
private double temp = 0.0;
private double number;
CaculatorWindow() {
textField = new JTextField();
GridLayout gridLayout = new GridLayout(4, 4);
JPanel panel = new JPanel();//定義計(jì)算器下方面板
panel.setLayout(gridLayout);
JButton[] buttons = new JButton[names.length];
for (int count = 0; count < names.length; count++) {
buttons[count] = new JButton(names[count]);
panel.add(buttons[count]);
}
//數(shù)字按鈕的響應(yīng)事件
class NumButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
JButton object = (JButton)event.getSource();
char jButtonName = object.getText().charAt(0);
switch (jButtonName){
default:
setTextField(jButtonName);
break;
}
}
void setTextField(char jButttonName){
textField.setText(textField.getText()+String.valueOf(jButttonName));//使得之前textField上的字不會被覆蓋
}
}
//加減乘除等于的響應(yīng)事件
class opeButtonHandler implements ActionListener{
public void actionPerformed(ActionEvent event){
String command = event.getActionCommand();
if(command.equals("+")){
temp = Double.parseDouble(textField.getText()); //用于保存運(yùn)算符號前一個數(shù)字
textField.setText("");
select = 1;
}
if(command.equals("-")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 2;
}
if(command.equals("*")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 3;
}
if(command.equals("/")){
temp = Double.parseDouble(textField.getText());
textField.setText("");
select = 4;
}
//在 = 處進(jìn)行+-*/事件處理
if(command.equals("=")){
switch (select){
case 1:
number = Double.parseDouble(textField.getText());//用于保存運(yùn)算符號后一個數(shù)字
textField.setText((temp+number)+"");
break;
case 2:
number = Double.parseDouble(textField.getText());
textField.setText((temp-number)+"");
break;
case 3:
number = Double.parseDouble(textField.getText());
textField.setText((temp*number)+"");
break;
case 4:
number = Double.parseDouble(textField.getText());
textField.setText((temp/number)+"");
break;
}
}
}
}
NumButtonHandler numButtonHandler = new NumButtonHandler();
for (int count = 0; count < names.length; count++) {
if(count == 3 || count == 7 || count == 11 || count == 14 || count == 15)
buttons[count].addActionListener(new opeButtonHandler());
else
buttons[count].addActionListener(numButtonHandler);
}
//設(shè)置文本框位于窗體NORTH位置
getContentPane().add(textField,BorderLayout.NORTH);
//將面板放置在窗體CENTER位置
getContentPane().add(panel,BorderLayout.CENTER);
this.setTitle("Caculator");
this.setBounds(80,80,300,200);
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new CaculatorWindow();
}
}
現(xiàn)存問題
只能實(shí)現(xiàn)簡單的加減乘除運(yùn)算,并且在觸發(fā)運(yùn)算符時(shí)無法再JTextField上顯示運(yùn)算符,之前的數(shù)字也將消失
將要解決
即使觸發(fā)運(yùn)算符,也能保留之前輸入數(shù)字
能實(shí)現(xiàn)運(yùn)算符的優(yōu)先等級,在計(jì)算器面板中加入更多運(yùn)算符如%,(,)