小弟刚写了个计算器,但发现其中有个错误,不知道为什么,请高手指出,谢谢import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JSQ extends Frame implements ActionListener{
private double result = 0;
private boolean flag = true; //标志
private JMenu menu;
private JMenuBar menubar;
private JMenuItem item;
private JTextField input1;
private JTextField input2;
private JTextField start;
private JLabel end;
private JTextField output;
private JButton b1;
private JButton [] p;
private String labels[] = {"1","2","3","4","5","6","7","8","9","0",".","清零","+","-","*","/"};
public JSQ(String s){
super(s);
input1 = new JTextField(5);
start = new JTextField(1);
input2 = new JTextField(5);
end = new JLabel("=");
output =new JTextField(10);
b1 = new JButton("等于");
p = new JButton[16];
for(int i=0; i<p.length; i++){
p[i] = new JButton(labels[i]);
} menubar = new JMenuBar();
menu = new JMenu("File");
item = new JMenuItem("Quit");
menubar.add(menu);
menu.add(item);
add(menubar);
setJMenuBar(menubar); //这句问什么是错的? add(input1);
add(start);
add(input2);
add(end);
add(output);
for(int j=0; j<p.length; j++)
add(p[j]);
add(b1);
input1.addActionListener(this);
b1.addActionListener(this);
for(int i=0; i<p.length; i++)
p[i].addActionListener(this); setLayout(new FlowLayout());
setBounds(60,60,340,220);
setBackground(new Color(200,220,180));
setVisible(true);
} public static void main(String[] args){
JSQ f= new JSQ("Simple Calculator");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0); //系统退出
}
});
} public void actionPerformed(ActionEvent e){
for(int i=0; i<p.length-5; i++)
if((JButton)e.getSource()==p[i] && flag){
input1.setText(input1.getText()+e.getActionCommand()); //得到按钮上的数字
}
for(int j=12; j<p.length; j++){
if((JButton)e.getSource()==p[12]){
start.setText("+");
flag = false;
}
if((JButton)e.getSource()==p[13]){ //点击”+,-,*,/"时,在start中输出相应的运算符
start.setText("-");
flag = false;
}
if((JButton)e.getSource()==p[14]){
start.setText("*");
flag = false;
}
if((JButton)e.getSource()==p[15]){
start.setText("/");
flag = false;
}
} for(int i=0; i<p.length-5; i++) //向input2中输入值
if((JButton)e.getSource()==p[i] && !flag){
input2.setText(input2.getText()+e.getActionCommand());
} if(e.getSource() == b1){
String s1 =input1.getText();
String s2 =input2.getText();
String seprator = start.getText();
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2); if(seprator.equals("+")) result = result + (d1 + d2);
if(seprator.equals("-")) result = result + (d1 - d2);
if(seprator.equals("*")) result = result + (d1 * d2);
if(seprator.equals("/")) result = result + (d1 / d2);
output.setText(String.valueOf(result));
}
//清零
if(e.getSource() == p[11]){
input1.setText(null);
input2.setText(null);
start.setText(null);
output.setText(null);
flag = true; //将标志flag设为原值,重新计算时,值将从input1输入
}
}
}
import java.awt.event.*;
import javax.swing.*;
public class JSQ extends Frame implements ActionListener{
private double result = 0;
private boolean flag = true; //标志
private JMenu menu;
private JMenuBar menubar;
private JMenuItem item;
private JTextField input1;
private JTextField input2;
private JTextField start;
private JLabel end;
private JTextField output;
private JButton b1;
private JButton [] p;
private String labels[] = {"1","2","3","4","5","6","7","8","9","0",".","清零","+","-","*","/"};
public JSQ(String s){
super(s);
input1 = new JTextField(5);
start = new JTextField(1);
input2 = new JTextField(5);
end = new JLabel("=");
output =new JTextField(10);
b1 = new JButton("等于");
p = new JButton[16];
for(int i=0; i<p.length; i++){
p[i] = new JButton(labels[i]);
} menubar = new JMenuBar();
menu = new JMenu("File");
item = new JMenuItem("Quit");
menubar.add(menu);
menu.add(item);
add(menubar);
setJMenuBar(menubar); //这句问什么是错的? add(input1);
add(start);
add(input2);
add(end);
add(output);
for(int j=0; j<p.length; j++)
add(p[j]);
add(b1);
input1.addActionListener(this);
b1.addActionListener(this);
for(int i=0; i<p.length; i++)
p[i].addActionListener(this); setLayout(new FlowLayout());
setBounds(60,60,340,220);
setBackground(new Color(200,220,180));
setVisible(true);
} public static void main(String[] args){
JSQ f= new JSQ("Simple Calculator");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0); //系统退出
}
});
} public void actionPerformed(ActionEvent e){
for(int i=0; i<p.length-5; i++)
if((JButton)e.getSource()==p[i] && flag){
input1.setText(input1.getText()+e.getActionCommand()); //得到按钮上的数字
}
for(int j=12; j<p.length; j++){
if((JButton)e.getSource()==p[12]){
start.setText("+");
flag = false;
}
if((JButton)e.getSource()==p[13]){ //点击”+,-,*,/"时,在start中输出相应的运算符
start.setText("-");
flag = false;
}
if((JButton)e.getSource()==p[14]){
start.setText("*");
flag = false;
}
if((JButton)e.getSource()==p[15]){
start.setText("/");
flag = false;
}
} for(int i=0; i<p.length-5; i++) //向input2中输入值
if((JButton)e.getSource()==p[i] && !flag){
input2.setText(input2.getText()+e.getActionCommand());
} if(e.getSource() == b1){
String s1 =input1.getText();
String s2 =input2.getText();
String seprator = start.getText();
double d1 = Double.parseDouble(s1);
double d2 = Double.parseDouble(s2); if(seprator.equals("+")) result = result + (d1 + d2);
if(seprator.equals("-")) result = result + (d1 - d2);
if(seprator.equals("*")) result = result + (d1 * d2);
if(seprator.equals("/")) result = result + (d1 / d2);
output.setText(String.valueOf(result));
}
//清零
if(e.getSource() == p[11]){
input1.setText(null);
input2.setText(null);
start.setText(null);
output.setText(null);
flag = true; //将标志flag设为原值,重新计算时,值将从input1输入
}
}
}
解决方案 »
- java nettbeans 编程问题,输入时以空格区分两个数字结果不正确,以enter则结果正确。困惑中啊,另外有什么写得不好的地方也请指出,谢谢啊
- Java库有没有集合操作?
- 不应在强制类型转换中使用类型参数,因为编译程序无法检查强制类型转换的合法性。
- 如何做这样的java程序
- 使用NekoHTML过程中遇到的问题
- 发若干java面试题 给大家做欢迎讨论 顺便散分
- 请高手推荐几本学习GUI入门级的书和一些资料!
- 求 HttpURLConnection 使用说明
- 微软提供的sql server的jdbc驱动可以设置字符集的属性吗
- 求proxy小程序
- 如何制作swing圆形按钮 拜托
- Java 菜鸟问题
是JFrame的方法,而不是Frame的方法 Frame的方法叫 setMenuBar(menubar)。把extends Frame 改成 extends JFrame