java中用awt做计算器_JavaAWT做的计算器,求指点

3.[文件]

Calculator.java ~ 6KB

下载(25)

import java.awt.BorderLayout;

import java.awt.Button;

import java.awt.Frame;

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.Insets;

import java.awt.Panel;

import java.awt.TextField;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

public class Calculator{

Frame f = new Frame("Colculator");

TextField tf = new TextField(30);

Panel keyboard = new Panel();

GridBagLayout gb = new GridBagLayout();

GridBagConstraints gbc = new GridBagConstraints();

boolean ifOperation = false; // 是否在运算状态

double d1 = 0d; // 第一个参数

double d2 = 0d; // 第二个参数

String operation = ""; // 运算符

private void init() {

keyboard.setLayout(gb);

gbc.fill = GridBagConstraints.BOTH;

gbc.insets = new Insets(4, 4, 4, 4);

gbc.weightx = 1;

addNumbers(1); // 添加第一行数字按钮

commonOperation("+"); // 添加加号

// 换行

gbc.gridwidth = GridBagConstraints.REMAINDER;

addClearBtn("C");

gbc.weightx = 1;

gbc.gridwidth = 1;

addNumbers(2);

commonOperation("-");

gbc.gridwidth = GridBagConstraints.REMAINDER;

addDeleteBtn("

gbc.weightx = 1;

gbc.gridwidth = 1;

addNumbers(3);

commonOperation("*");

//修正后代码:感谢 @CCNU 的解答

gbc.gridx=4;

gbc.gridy=2;

gbc.gridheight = 2;

gbc.weighty = 1;

gbc.gridwidth = GridBagConstraints.REMAINDER;

addEqualsBtn("=");

gbc.gridx=0;

gbc.gridy=3;

gbc.gridwidth = 2;

gbc.gridheight = 1;

gbc.weightx = 1;

gbc.weighty = 1;

addZeroBtn("0");

gbc.gridx=2;

gbc.gridy=3;

gbc.gridwidth = 1;

addDotBtn(".");

gbc.gridx=3;

gbc.gridy=3;

commonOperation("/");

f.setLayout(new BorderLayout());

f.add(tf, BorderLayout.NORTH);

f.add(keyboard);

f.addWindowListener(new CloseListener());

f.pack();

f.setVisible(true);

}

/**

* 添加点按钮

*

* @param string

*/

private void addDotBtn(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String val = tf.getText();

if (val.equals("")) {

tf.setText("0.");

} else if (val.indexOf(".") < 0) {

tf.setText(tf.getText() + btn.getLabel());

}

}

});

keyboard.add(btn);

}

/**

* 添加数字0按钮

*

* @param string

*/

private void addZeroBtn(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String val = tf.getText();

if (val.startsWith("0.") || val.isEmpty()) {

tf.setText(tf.getText() + btn.getLabel());

}

}

});

keyboard.add(btn);

}

/**

* 运算通用方法

*

* @param string

*/

private void commonOperation(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

ifOperation = true;

operation = e.getActionCommand();

String val = tf.getText();

if (!val.equals("")) {

d1 = Double.valueOf(val);

}

}

});

keyboard.add(btn);

}

/**

* 添加等号按钮

*

* @param string

*/

private void addEqualsBtn(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

ifOperation = true;

String val = tf.getText();

if (!val.equals("")) {

d2 = Double.valueOf(val);

if (!operation.equals("")) {

Double d = 0d;

switch (operation.charAt(0)) {

case '+':

d = d1 + d2;

break;

case '-':

d = d1 - d2;

break;

case '*':

d = d1 * d2;

break;

case '/':

d = d1 / d2;

break;

}

tf.setText(d + "");

} else {

tf.setText(d2 + "");

}

}

}

});

keyboard.add(btn);

}

/**

* 添加清空按钮

*

* @param string

*/

private void addClearBtn(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

tf.setText(""); // 清空内容

}

});

keyboard.add(btn);

}

/**

* 添加删除按钮

*

* @param string

*/

private void addDeleteBtn(String string) {

final Button btn = new Button(string);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

String val = tf.getText();

if (!val.equals("")) {

tf.setText(val.substring(0, val.length() - 1));

}

}

});

keyboard.add(btn);

}

/**

* 添加数字按钮

*

* @param row

*/

private void addNumbers(int row) {

for (int i = 1; i <= 3; i++) {

keyboard.add(getNumberBtn((row - 1) * 3 + i + ""));

}

}

/**

* 获取数字按钮

*

* @param number

* @return

*/

private Button getNumberBtn(String number) {

final Button btn = new Button(number);

gb.setConstraints(btn, gbc);

btn.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

if (ifOperation) {

tf.setText("");

ifOperation = false;

}

tf.setText(tf.getText() + btn.getLabel());

}

});

return btn;

}

class CloseListener extends WindowAdapter {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

}

public static void main(String[] args) {

new Calculator().init();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值