java非常简单的问题(用swing做计算器)

王兰花 2018-05-09 05:40:33
package src.test;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class examplethree extends JFrame {
JTextField inputField;
JPanel p1=new JPanel();
JPanel p2=new JPanel();
double result;//计算结果
String symbol;//运算符号
public void addButton(String a, ActionListener cc){
JButton button = new JButton(a);
button.addActionListener(cc);
p2.add(button);
}
public examplethree(){
JMenuBar menubar=new JMenuBar();
this.setJMenuBar(menubar);
JMenu menu1=new JMenu("简单");
JMenu menu2=new JMenu("完整");
JMenu menu3=new JMenu("科学");
menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);
symbol="=";
this.setTitle("计算器");
this.setSize(200, 300);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
inputField = new JTextField(20);
p1.add(inputField);
this.add(p1,BorderLayout.NORTH);
p2.setLayout(new GridLayout(4, 4 , 6, 6));
class Action1 implements ActionListener{
public void actionPerformed(ActionEvent e){
String input=e.getActionCommand();
inputField.setText(inputField.getText()+input);
}
}
class Action2 implements ActionListener{
public void actionPerformed(ActionEvent e){
String input=e.getActionCommand();
symbol = input;
result =Double.parseDouble(inputField.getText());
if(symbol.equals("+")){
inputField.setText(" ");
result +=Double.parseDouble(input);
}
else if(symbol.equals("-")){
result -=Double.parseDouble(inputField.getText());
}
else if(symbol.equals("*")){
result *=Double.parseDouble(inputField.getText());
}
else if(symbol.equals("/")){
result /=Double.parseDouble(inputField.getText());
}else{
result =Double.parseDouble(inputField.getText());
}
inputField.setText(result+"");

}
}
class Action3 implements ActionListener{
public void actionPerformed(ActionEvent e){
String input=e.getActionCommand();
if(input.equals("C")){
inputField.setText("0");
}
}
}
menu2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JPanel panel1=new JPanel();
JLabel label=new JLabel("wobu",JLabel.CENTER);
label.setFont(new Font("宋体",Font.PLAIN,20));
panel1.add(label);
panel1.setVisible(true);
}
});
Action1 a1 = new Action1();
Action2 a2 = new Action2();
Action3 a3 = new Action3();
this.addButton("7",a1);
this.addButton("8",a1);
this.addButton("9",a1);
this.addButton("+",a2);
this.addButton("4",a1);
this.addButton("5",a1);
this.addButton("6",a1);
this.addButton("-",a2);
this.addButton("1",a1);
this.addButton("2",a1);
this.addButton("3",a1);
this.addButton("*",a2);
this.addButton("0",a1);
this.addButton("C",a3);
this.addButton("=",a2);
this.addButton("/",a2);
this.add(p2,BorderLayout.SOUTH);
this.pack();

}//构造方法
public static void main(String[] args){
new examplethree();
}
}









可能逻辑有错误可是我找不出来了,运行加法运算只显示后面输入的·数字,求解
...全文
1032 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
跟你的减号的处理一样的就可以了。。。。。
  • 打赏
  • 举报
回复
引用 3 楼 sinat_33854637 的回复:
[quote=引用 2 楼 lye2000000_super 的回复:] if(symbol.equals("+")){ inputField.setText(" "); result +=Double.parseDouble(input); } 因为你解析的是加号。。。。。。
我是先实现加法的啊,运行加法运算只显示后面输入的·数字这里不懂呢[/quote] class Action2 implements ActionListener{ public void actionPerformed(ActionEvent e){ String input=e.getActionCommand(); symbol = input; result =Double.parseDouble(inputField.getText()); if(symbol.equals("+")){ inputField.setText(" "); result +=Double.parseDouble(input); } else if(symbol.equals("-")){ result -=Double.parseDouble(inputField.getText()); } else if(symbol.equals("*")){ result *=Double.parseDouble(inputField.getText()); } else if(symbol.equals("/")){ result /=Double.parseDouble(inputField.getText()); }else{ result =Double.parseDouble(inputField.getText()); } inputField.setText(result+""); } } 把红色的地方改成result +=Double.parseDouble(inputField.getText()); 你在把加号解析成数字,自然会报错不出结果了。实际上是出了异常了。所以不出结果。
王兰花 2018-05-10
  • 打赏
  • 举报
回复
引用 2 楼 lye2000000_super 的回复:
if(symbol.equals("+")){ inputField.setText(" "); result +=Double.parseDouble(input); } 因为你解析的是加号。。。。。。
我是先实现加法的啊,运行加法运算只显示后面输入的·数字这里不懂呢
  • 打赏
  • 举报
回复
if(symbol.equals("+")){ inputField.setText(" "); result +=Double.parseDouble(input); } 因为你解析的是加号。。。。。。
【资源说明】 Java大作业基于JavaSwing实现的模拟程序员计算器源码+项目说明.zip 课题要求: 基本要求: `已完成`按照TI 程序员计算器(1982 年LCD版本)的原始面板键盘和显示布局设计出计算器的交互窗口. `已完成`实现 10 进制和 16 进制的基础算术运算。即不含括号的单步加减乘除运算。 提高要求: `已完成`实现输入的 10 进制数和 16 进制数之间的相互转换 `已完成`实现与、或、异或、 `已完成`反码、补码和移位运算 `已完成`实现单一进制模式下的带括号的组合多步运算 `已完成`实现混合进制模式下带括号的组合多步运算 `已完成`设计运算溢出等出错提示。 备注 课题要求中给出的基本要求和提高要求将作为评分依据,根据大作 业评分标准进行评分,在基本要求和提高要求以外实现的其它功能不作为评分依据。 本大作业课题中设计实现的计算器不需要进行以八进制以及二进制输入输出的数据转 换或计算。 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!
大连民族大学 计算机科学与工程学院 《Java语言》课程实验报告 实验题目: 计算器的设计与实现 课程名称: Java语言 实验类型: 演示性 验证性 操作性 设计性 综合性 专业:网络工程 班级:**** 学生姓名*** 学号:***** 实验日期:2018年 4月23日 地点:计算机学院综合试验中心(I-303) 实验学时:4 实验成绩: 指导教师签字: 2018年 5月21日 1. 问题需求描述:Problem description 利用Java Swing设计计算器图形化界面,并实现事件的监听,以及计算器基本的加、减、乘、除、 清空、输出运算结果的操作,学习使用各种图形化界面的控件,容器,布局等,学习对 按钮事件的处理等。以及对非法输入的处理。 2. 设计说明:Design notes 本计算器,界面方面总体采用BorderLayout布局,显示输入输入的文本框和清除按钮 采用FlowLayout布局,容器放在BorderLayout的North;0- 9和各种运算符号还有小数点采用GridLayout布局,容器放在BorderLayou的Center;事 件监听和处理通过实现addActioListener监视器接口和ItemEvent事件接口,从而对每一 个按钮实现事件的监听和处理;计算方面,调用ScriptEngineManager和ScriptEngine两 个类,直接通过eval函数直接把输入文本当作JS代码执行,输出执行结果,这样报错也 会直接实现,另把文本框设置不允许直接从键盘输入以防止出现安全事件。 最后通过转化成JS代码运算得到启发,使用类似方法,我还实现了调用VB代码实现计算 器实时读出键盘输入,发出声音。 3. 系统实现:system implementation 1.程序界面展示 4. 总结体会: summary and experience 实验达到了预期的目标。通过此次的编程,我学会了用Java语言编写简单的软件,增强 了我对学习Java的兴趣。编程过程中,总体设计主要是窗口与组件的应用,具体执行则 是利用Java语言设计算法,而难点也在算法的设计上。虽然程序大体上符合要求,但由 于第一次编写这么复杂的程序,程序仍然存在一- 些漏洞,譬如由于未进行异常处理,当连续输入运算符是程序会出错,还有若一直按小 数点的话会得到一连串的小数点。由于最近忙着考试没有时间修改,考试结束后一定认 真修改这些问题。我觉得在编程时应该注意排版对齐,这样不论是自己检查程序还是别 人阅读程序都会更加方便。如果能添加备注的话以后阅读程序会更容易些。在以后的编 程中我会吸取经验,养成认真、严谨的编程习惯。 附:程序清单 1. import javax.swing.JFrame; public class Calculator { public static void main(String[] paramArrayOfString) { CalculatorFrame localCalculatorFrame = new CalculatorFrame(); localCalculatorFrame.setSize(800, 800); localCalculatorFrame.setVisible(true); } } 2 import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; class CalculatorFrame extends JFrame { public CalculatorFrame() { setTitle("Calculator"); setSize(200, 200); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent paramAnonymousWindowEvent) { System.exit(0); } }); Container localContainer = getContentPane(); localContainer.add(new CalculatorPanel()); } } 3. import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.GridLayout; import java.awt.eve

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧