import java.awt.*;
import java.awt.event.*;public class Calculator extends Frame { public static void main(String[] args) {
new Calculator().launchFrame();
} TextField tf = new TextField(); // 定义计算器显示框用以显示数据 public void launchFrame() {
this.setTitle("严振的第一个小项目-计算器"); Label la = new Label("严振的世界很精彩", Label.RIGHT); // 定义计算器的标签 this.setLayout(new BorderLayout()); //设置BorderLayout布局。
setLocation(640, 480);
this.setSize(320, 240); Panel p1 = new Panel(new GridLayout(4, 4)); // 添加一个Panel,用于放置数字及相关按钮。 this.add(tf, BorderLayout.NORTH);
this.add(la, BorderLayout.SOUTH); Button button1 = new Button("1"); // 添加相应的按钮。
p1.add(button1);
Button button2 = new Button("2");
p1.add(button2);
Button button3 = new Button("3");
p1.add(button3);
Button button4 = new Button("4");
p1.add(button4);
Button button5 = new Button("5");
p1.add(button5);
Button button6 = new Button("6");
p1.add(button6);
Button button7 = new Button("7");
p1.add(button7);
Button button8 = new Button("8");
p1.add(button8);
Button button9 = new Button("9");
p1.add(button9);
Button button10 = new Button("0");
p1.add(button10);
Button button11 = new Button("+");
p1.add(button11);
Button button12 = new Button("-");
p1.add(button12);
Button button13 = new Button("*");
p1.add(button13);
Button button14 = new Button("/");
p1.add(button14);
Button button15 = new Button("="); // 特殊,求结果。应单独设置事件。
p1.add(button15);
Button button16 = new Button("CE"); // 清屏按钮
p1.add(button16); setVisible(true);
this.add(p1, BorderLayout.CENTER); this.addWindowListener(new WindowAdapter() { // 匿名类,系统退出
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
button1.addActionListener(new TextListener()); // 实现监听类(能否实现批量添加事件???)
button2.addActionListener(new TextListener());
button3.addActionListener(new TextListener());
button4.addActionListener(new TextListener());
button5.addActionListener(new TextListener());
button6.addActionListener(new TextListener());
button7.addActionListener(new TextListener());
button8.addActionListener(new TextListener());
button9.addActionListener(new TextListener());
button10.addActionListener(new TextListener());
button11.addActionListener(new TextListener());
button12.addActionListener(new TextListener());
button13.addActionListener(new TextListener());
button14.addActionListener(new TextListener());
// button15.addActionListener(new TextListener());
button16.addActionListener(new TextListener());
} // 用内部类实现数字按钮的事件。Important!
private class TextListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = tf.getText();
tf.setText(s + e.getActionCommand());
if (e.getActionCommand() == "CE") {
tf.setText("");
}
if (e.getActionCommand() == "+") {
float store = Float.parseFloat(s);
//tf.setText("");
if (e.getActionCommand() == "=") {
float store1 = Float.parseFloat(s);
float sum = store + store1;
System.out.println(sum);
}
} if (e.getActionCommand() == "-") {
tf.setText("");
} if (e.getActionCommand() == "*") {
tf.setText("");
} if (e.getActionCommand() == "/") {
tf.setText("");
}
}
}
}
问题:
1.能否用更简单的方式实现代码监听事件的添加。
2.计算过程设想如下:先输入一个数据,再输入运算符,再输入第二个数据。这部分代码如何实现?如果做连续计算呢?
import java.awt.event.*;public class Calculator extends Frame { public static void main(String[] args) {
new Calculator().launchFrame();
} TextField tf = new TextField(); // 定义计算器显示框用以显示数据 public void launchFrame() {
this.setTitle("严振的第一个小项目-计算器"); Label la = new Label("严振的世界很精彩", Label.RIGHT); // 定义计算器的标签 this.setLayout(new BorderLayout()); //设置BorderLayout布局。
setLocation(640, 480);
this.setSize(320, 240); Panel p1 = new Panel(new GridLayout(4, 4)); // 添加一个Panel,用于放置数字及相关按钮。 this.add(tf, BorderLayout.NORTH);
this.add(la, BorderLayout.SOUTH); Button button1 = new Button("1"); // 添加相应的按钮。
p1.add(button1);
Button button2 = new Button("2");
p1.add(button2);
Button button3 = new Button("3");
p1.add(button3);
Button button4 = new Button("4");
p1.add(button4);
Button button5 = new Button("5");
p1.add(button5);
Button button6 = new Button("6");
p1.add(button6);
Button button7 = new Button("7");
p1.add(button7);
Button button8 = new Button("8");
p1.add(button8);
Button button9 = new Button("9");
p1.add(button9);
Button button10 = new Button("0");
p1.add(button10);
Button button11 = new Button("+");
p1.add(button11);
Button button12 = new Button("-");
p1.add(button12);
Button button13 = new Button("*");
p1.add(button13);
Button button14 = new Button("/");
p1.add(button14);
Button button15 = new Button("="); // 特殊,求结果。应单独设置事件。
p1.add(button15);
Button button16 = new Button("CE"); // 清屏按钮
p1.add(button16); setVisible(true);
this.add(p1, BorderLayout.CENTER); this.addWindowListener(new WindowAdapter() { // 匿名类,系统退出
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
button1.addActionListener(new TextListener()); // 实现监听类(能否实现批量添加事件???)
button2.addActionListener(new TextListener());
button3.addActionListener(new TextListener());
button4.addActionListener(new TextListener());
button5.addActionListener(new TextListener());
button6.addActionListener(new TextListener());
button7.addActionListener(new TextListener());
button8.addActionListener(new TextListener());
button9.addActionListener(new TextListener());
button10.addActionListener(new TextListener());
button11.addActionListener(new TextListener());
button12.addActionListener(new TextListener());
button13.addActionListener(new TextListener());
button14.addActionListener(new TextListener());
// button15.addActionListener(new TextListener());
button16.addActionListener(new TextListener());
} // 用内部类实现数字按钮的事件。Important!
private class TextListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = tf.getText();
tf.setText(s + e.getActionCommand());
if (e.getActionCommand() == "CE") {
tf.setText("");
}
if (e.getActionCommand() == "+") {
float store = Float.parseFloat(s);
//tf.setText("");
if (e.getActionCommand() == "=") {
float store1 = Float.parseFloat(s);
float sum = store + store1;
System.out.println(sum);
}
} if (e.getActionCommand() == "-") {
tf.setText("");
} if (e.getActionCommand() == "*") {
tf.setText("");
} if (e.getActionCommand() == "/") {
tf.setText("");
}
}
}
}
问题:
1.能否用更简单的方式实现代码监听事件的添加。
2.计算过程设想如下:先输入一个数据,再输入运算符,再输入第二个数据。这部分代码如何实现?如果做连续计算呢?
解决方案 »
- IOException异常小问题,在线等
- 怎么把PDF格式转换为word格式
- applet 查询记录在客户端继续筛选的问题。请大家帮忙。
- 怎么用JAVA访问linux下的Progress数据库
- java中有沒有現在的函數直接截取字符串前十個字符?
- 如何画2象素的曲线?
- 问下关于jtextarea鼠标形状设置的问题
- 一个简单的发送信息至我的邮箱的程序,为什么总提示我cannot resolve getOutputStream和outprintln??
- java如何调用本地的dll 或ocx等
- long转float会有精度损失?
- jsp源代码格式工具,开发完毕
- 两个基础性的小问题(关于选择法排序和选择输出)
import java.awt.event.*;
import javax.swing.*;
public class Calculator {
public static void main(String[] args){
CalculatorFrame frame=new CalculatorFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
} }class CalculatorFrame extends JFrame {
/**
*
*/
public CalculatorFrame() {
// TODO Auto-generated constructor stub
setTitle("Calculator");
CalculatorPanel panel=new CalculatorPanel();
add(panel);
pack();
}
}
class CalculatorPanel extends JPanel{
public CalculatorPanel(){
setLayout(new BorderLayout());
result=0;
lastCommand="=";
display=new JButton("0");
display.setEnabled(false);
add(display, BorderLayout.NORTH);
ActionListener insert=new InsertAction();
ActionListener command=new CommandAction();
panel=new JPanel();
panel.setLayout(new GridLayout(4,4));
addButton("7",insert);
addButton("8",insert);
addButton("9",insert);
addButton("/",command);
addButton("4",insert);
addButton("5",insert);
addButton("6",insert);
addButton("*",command);
addButton("1",insert);
addButton("2",insert);
addButton("3",insert);
addButton("-",command);
addButton("0",insert);
addButton("2.",insert);
addButton("=",command);
addButton("+",command);
add(panel, BorderLayout.CENTER);
}
private void addButton(String label, ActionListener listener){
JButton button=new JButton(label);
button.addActionListener(listener);
panel.add(button);
}
private class InsertAction implements ActionListener{
public void actionPerformed(ActionEvent event){
String input=event.getActionCommand();
if(start){
display.setText("");
start=false;
}
display.setText(display.getText()+input);
}
}
private class CommandAction implements ActionListener{
public void actionPerformed(ActionEvent event){
String command=event.getActionCommand();
if(start){
if(command.equals("-")){
display.setText(command);
start=false;
}else
lastCommand=command;
}else{
calculate(Double.parseDouble(display.getText()));
lastCommand=command;
start=true;
}
}
}
public void calculate(double x) {
if (lastCommand.equals("+"))result += x;
else if (lastCommand.equals("-"))result -= x;
else if (lastCommand.equals("*"))result *= x;
else if (lastCommand.equals("/"))result /= x;
else if (lastCommand.equals("="))result = x;
display.setText("" + result);
}
private double result;
private String lastCommand;
private boolean start;
private JButton display;
private JPanel panel;
}