使用布局管理器编写的简易计算器。
代码如下:
package com.cjg.jisuanqi;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
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 extends WindowAdapter {
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
TextField txt;
private Button[] b = new Button[17];
private String ss[] = {"7","8","9","+","4","5","6","-","1","2","3","*","清空","0","=","/","关闭"};
static double a = 0;
static String s, str;
public static void main(String[] args) {
// TODO 自动生成的方法存根
(new Calculator()).frame();
}
public void frame(){
Frame fm = new Frame("计算器");
for (int i = 0; i <=16; i++) {
b[i] = new Button(ss[i]);
}
for (int i = 0; i <=15; i++) {
p2.add(b[i]);
}
b[16].setBackground(Color.yellow);
txt = new TextField(15);
txt.setEditable(false);
for (int i = 0; i < 16; i++) {
b[i].addActionListener(new buttonlistener());
}
b[16].addActionListener(new close());
fm.addWindowListener(this);
fm.setBackground(Color.red);
p1.setLayout(new BorderLayout());
p1.add(txt, "North");
p2.setLayout(new GridLayout(4,4));
p3.setLayout(new BorderLayout());
p3.add(b[16]);
//添加各个面板到窗口上
fm.add(p1, "North");
fm.add(p2, "Center");
fm.add(p3, "South");
fm.pack();
fm.setVisible(true);
}
public void windowClosing(WindowEvent e){
System.exit(0);
}
//编写事件监听器
class buttonlistener implements ActionListener{
public void actionPerformed(ActionEvent e){
Button btn = (Button) e.getSource();
if (btn.getLabel() == "=") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
s = "";
} else if(btn.getLabel() == "+") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
//txt.setText("");
s = "+";
}else if(btn.getLabel() == "-") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
s = "-";
}else if(btn.getLabel() == "*") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
s = "*";
}else if(btn.getLabel() == "/") {
jisuan();
str = String.valueOf(a);
txt.setText(str);
s = "/";
}else {
//str = String.valueOf(a);
txt.setText(btn.getLabel());
//jisuan();
}
}
public void jisuan(){
if(s == "+")
a += Double.parseDouble(txt.getText());
else if(s == "-")
a -= Double.parseDouble(txt.getText());
else if(s == "*")
a *= Double.parseDouble(txt.getText());
else if(s == "/")
a /= Double.parseDouble(txt.getText());
else
a = Double.parseDouble(txt.getText());
}
}
}
class close implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}