java计算器改变框架_Java 简易计算器

预想计算器图为:

1122d5e87a88?from=singlemessage

简易计算器

如何实现?

1.画出计算器框架图

2.设置button的监听事件,在监听中实现将值传入到JTextField面板上,并在触发“+”等预算符时实现运算

贴上代码画框代码 用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();//定义计算器下方面板

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]);

}

//设置文本框位于窗体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();

}

}

再贴上实现监听和运算过程代码

//数字按钮的响应事件

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上的字不会被覆盖

}

}

//加减乘除等于的响应事件

class opeButtonHandler implements ActionListener{

public void actionPerformed(ActionEvent event){

String command = event.getActionCommand();

if(command.equals("+")){

temp = Double.parseDouble(textField.getText()); //用于保存运算符号前一个数字

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;

}

//在 = 处进行+-*/事件处理

if(command.equals("=")){

switch (select){

case 1:

number = Double.parseDouble(textField.getText());//用于保存运算符号后一个数字

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();//定义计算器下方面板

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]);

}

//数字按钮的响应事件

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上的字不会被覆盖

}

}

//加减乘除等于的响应事件

class opeButtonHandler implements ActionListener{

public void actionPerformed(ActionEvent event){

String command = event.getActionCommand();

if(command.equals("+")){

temp = Double.parseDouble(textField.getText()); //用于保存运算符号前一个数字

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;

}

//在 = 处进行+-*/事件处理

if(command.equals("=")){

switch (select){

case 1:

number = Double.parseDouble(textField.getText());//用于保存运算符号后一个数字

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);

}

//设置文本框位于窗体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();

}

}

现存问题

只能实现简单的加减乘除运算,并且在触发运算符时无法再JTextField上显示运算符,之前的数字也将消失

将要解决

即使触发运算符,也能保留之前输入数字

能实现运算符的优先等级,在计算器面板中加入更多运算符如%,(,)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值