社区
Java SE
帖子详情
本人正在做一个计算器,其中能响应键盘事件,加减乘除怎么实现?
zhoukai1980
2004-12-16 02:41:12
我用VK_ADD也不是 + 阿
请指教
...全文
673
15
打赏
收藏
本人正在做一个计算器,其中能响应键盘事件,加减乘除怎么实现?
我用VK_ADD也不是 + 阿 请指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
water2004
2004-12-18
打赏
举报
回复
可以用汉字。还有两个button类没给出。你自己写吧。应该能写出来
light56
2004-12-18
打赏
举报
回复
/** CalculatorApplet 计算器
* 操作数? (第一位) 完成后标志位F; (非第一) String的连接
* "-" ? (负号) 完成后标志位F; (减号) 运算符保存
*
* 是运算符: A+B-C (输入"-")? (A+B)运算并显示结果.
* 保持"-"为下次运算做准备
* @version 1.20 27 Jun 1998
* @author Cay Horstmann
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CalculatorApplet extends JApplet
{
public void init()
{ Container contentPane = getContentPane(); // Returns the contentPane object for this applet.
contentPane.add(new CalculatorPanel());
}
}
class CalculatorPanel extends JPanel implements ActionListener
{
private JTextField display;
private double arg = 0; // 运算结果存储区
private String op = "=";
private boolean start = true;
public CalculatorPanel()
{
setLayout(new BorderLayout());
display = new JTextField("0");
display.setEditable(false);
add(display, "North");
JPanel p = new JPanel(); // 按钮面板布局
p.setLayout(new GridLayout(4, 4));
String buttons = "789/456*123-0.=+";
for (int i = 0; i < buttons.length(); i++)
addButton(p, buttons.substring(i, i + 1));
/*
从i开始, 到i结束. 每次返回一个字符作为创建要素
返回是该字符串子串的新字符串。
子串开始于指定的 beginIndex ,
且扩展到索引为 endIndex - 1 的位置。
*/
add(p, "Center");
}
private void addButton(Container c, String s) // c = JPanel
{ // 创建新按钮, 放置到面板, 添加监听器, 一气呵成
JButton b = new JButton(s);
c.add(b);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent evt)
{
String s = evt.getActionCommand(); // 返回与该动作相关的命令名。
if ('0' <= s.charAt(0) && s.charAt(0) <= '9'
|| s.equals("."))
{ // 操作数
if (start)
{ // 操作数的第一位
display.setText(s);
start = false;
}
else
{ // 非操作数的第一位
display.setText(display.getText() + s);
}
}
else // 是'-'吗?
{ if (start)
{ if (s.equals("-")) // 负数处理
{
display.setText(s);
start = false;
}
else op = s;
}
else // 开始运算 A+B-C
{ calculate(Double.parseDouble
(display.getText())); // A+B
// 有必要判断吗?
// display.getText() 是数字吗?
// 是: 计算; 不是: 操作符刷新
op = s; // - 运算符保存起, 为下次运算做准备
start = true; // 为下一个操作数的输入做准备
}
}
}
public void calculate(double n)
{ if (op.equals("+")) arg += n; // 运算符是前一次输入的
else if (op.equals("-")) arg -= n;
else if (op.equals("*")) arg *= n;
else if (op.equals("/")) arg /= n;
else if (op.equals("=")) arg = n;
display.setText("" + arg); // 显示运算结果
}
}
尹立
2004-12-17
打赏
举报
回复
water2004(@-@)
标识符难道可以用汉字表示吗?
汉字最高位是1 而字母最高位是0
java不是只允许以字母开头的标识符吗?
nako_ruru
2004-12-17
打赏
举报
回复
栈 stack
说好不能打脸
2004-12-17
打赏
举报
回复
楼上的你给别人写了那么多,几句注释也没有,你叫别人咋看?
其实主要有两点,第一点就是监听器,建议使用KeyAdapter类(适配器);第二点就是如何将字符串转化为int型:
1、键盘监听器及实现:
import java.awt.Button;
import java.awt.event.KeyEvent;
import java.awt.event.KeyAdapter;
public class Test2 {
/*这里只写如何向按钮添加监听器,并用KeyAdapter作出相应事件*/
public Test2(){
Button myButton = new Button();
myButton.addKeyListener(new Adapter());//添加监听器
}
/**
* 此类用于处理键盘事件,还可以覆盖很多方法,详见API
* */
class Adapter extends KeyAdapter{
public void keyPressed(KeyEvent e){
e.getKeyChar();//接受键盘输入的字符
}
}
}
2、将字符串转化为int型
String.valueOf(int i),这是一个静态方法
另外还有一个方法可以将int型转化为字符串型
Integer.parseInt(String s), 这也是一个静态方法
bradwoo8621
2004-12-17
打赏
举报
回复
qi其他的一样
bradwoo8621
2004-12-17
打赏
举报
回复
operationButton[0].registerKeyboardAction(new ActionListener(){
public void actionPerformed(ActionEvent e) {
operationButton[0].doClick();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ADD, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
当焦点在窗口任何地方, 按下+, 就会发送一个操作+按钮的点击事件.
water2004
2004-12-17
打赏
举报
回复
public void actionPerformed(ActionEvent e)
{
if(e.getSource() instanceof NumberButton)
{
NumberButton b=(NumberButton)e.getSource();
if(链表.size()==0)
{
int number=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
是否按下等号=false;
}
else if(链表.size()==1&&是否按下等号==false)
{
int number=b.getNumber();
String num=(String)链表.getFirst();
String s=num.concat(""+number);
链表.set(0,s);
resultShow.setText(s);
}
else if(链表.size()==1&&是否按下等号==true)
{
int number=b.getNumber();
链表.removeFirst();
链表.add(""+number);
是否按下等号=false;
resultShow.setText(""+number);
}
else if(链表.size()==2)
{
int number=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
}
else if(链表.size()==3)
{
int number=b.getNumber();
String num=(String)链表.getLast();
String s=num.concat(""+number);
链表.set(2,s);
resultShow.setText(s);
}
}
else if(e.getSource() instanceof OperationButton)
{
OperationButton b=(OperationButton)e.getSource();
if(链表.size()==1)
{
String fuhao=b.get运算符号();
链表.add(fuhao);
}
else if(链表.size()==2)
{
String fuhao=b.get运算符号();
链表.set(1,fuhao);
}
else if(链表.size()==3)
{
String fuhao=b.get运算符号();
String number1=(String)链表.getFirst();
String number2=(String)链表.getLast();
String 运算符号=(String)链表.get(1);
try
{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
else if(运算符号.equals("-"))
{
n=n1-n2;
}
else if(运算符号.equals("*"))
{
n=n1*n2;
}
else if(运算符号.equals("/"))
{
n=n1/n2;
}
链表.clear();
链表.add(""+n);
链表.add(fuhao);
resultShow.setText(""+n);
}
catch(Exception ee)
{
}
}
}
else if(e.getSource()==等号按钮)
{
是否按下等号=true;
if(链表.size()==1||链表.size()==2)
{
String num=(String)链表.getFirst();
resultShow.setText(""+num);
}
else if(链表.size()==3)
{
String number1=(String)链表.getFirst();
String number2=(String)链表.getLast();
String 运算符号=(String)链表.get(1);
try
{
double n1=Double.parseDouble(number1);
double n2=Double.parseDouble(number2);
double n=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
else if(运算符号.equals("-"))
{
n=n1-n2;
}
else if(运算符号.equals("*"))
{
n=n1*n2;
}
else if(运算符号.equals("/"))
{
n=n1/n2;
}
resultShow.setText(""+n);
链表.set(0,""+n);
链表.removeLast();
链表.removeLast();
}
catch(Exception ee)
{
}
}
}
water2004
2004-12-17
打赏
举报
回复
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.LinkedList;
import java.text.NumberFormat;
public class ComputerPad extends Frame implements ActionListener
{
NumberButton numberButton[];
OperationButton oprationButton[];
Button 小数点按钮,正负号按钮,退格按钮,
求倒数按钮,等号按钮,清零按钮;
Panel panel;
JTextField resultShow;
String 运算符号[]={"+","-","*","/"};
LinkedList 链表;
boolean 是否按下等号=false;
public ComputerPad()
{
super("计算器");
链表=new LinkedList();
numberButton=new NumberButton[10];
for(int i=0;i<=9;i++)
{
numberButton[i]=new NumberButton(i);
numberButton[i].addActionListener(this);
}
oprationButton=new OperationButton[4];
for(int i=0;i<4;i++)
{
oprationButton[i]=new OperationButton(运算符号[i]);
oprationButton[i].addActionListener(this);
}
小数点按钮=new Button(".");
正负号按钮 =new Button("+/-");
等号按钮=new Button("=");
求倒数按钮=new Button("1/x");
退格按钮=new Button("退格");
清零按钮=new Button("C");
清零按钮.setForeground(Color.red);
退格按钮.setForeground(Color.red);
等号按钮.setForeground(Color.red);
求倒数按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
小数点按钮.setForeground(Color.blue);
退格按钮.addActionListener(this);
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
正负号按钮.addActionListener(this);
求倒数按钮.addActionListener(this);
resultShow=new JTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14));
resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(false);
panel=new Panel();
panel.setLayout(new GridLayout(4,5));
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(oprationButton[0]);
panel.add(清零按钮);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(oprationButton[1]);
panel.add(退格按钮);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(oprationButton[2]);
panel.add(求倒数按钮);
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(oprationButton[3]);
panel.add(等号按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
setVisible(true);
setBounds(100,50,240,180);
setResizable(false);
validate();
}
water2004
2004-12-16
打赏
举报
回复
我给你程序,你自己看。给多点分我我不够用了。如何!
zhangliecheng
2004-12-16
打赏
举报
回复
jTextField.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ADD){
System.out.println(true);
}
}
});
classjava
2004-12-16
打赏
举报
回复
不要用键盘事件,用普通监听器,然后对该按钮加个shortcut,如同"+"button就叫个VK_ADD
thomas_20
2004-12-16
打赏
举报
回复
可以的啊:
jTextField.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ADD){
System.out.println(true);
}
}
});
试试,^_^
zhoukai1980
2004-12-16
打赏
举报
回复
没有人会阿,还是自己研究把
vgvg
2004-12-16
打赏
举报
回复
加就直接用+
取出a,取出b.
int i=Integer.parse(a)+Integer.parse(b);
计算器
功能 提供了 快捷间 以及托盘显示
开发平台 winxpsp2+vc6.0sp6 主要功能 1.
计算器
功能 a.
加减乘除
b.连加连减等运算 c.显示数据结果 2.其他功能 a.时间显示 b.将配置写入ini文件保存方便下次读取 c.开机启动功能 d.系统锁定功能,鼠标键盘锁定,留有
一个
退出后门热键F4 e.
实现
右键弹出菜单并且
响应
相关的功能 f.最小化到系统栏,
实现
系统栏右键弹出菜单 http://www.yqshare.com
C#
做
的类似windows
计算器
vs2008 C# 支持键盘
响应
,可完成简单乘除加减 开方 倒数等 代码通俗易懂
Python PyQt6
计算器
项目
# Python PyQt6
计算器
项目## 课程介绍本课程使用 Python PyQt 库,带大家一步一步地
实现
一个
数字
计算器
,大家能从中学习到 PyQt 的主窗口创建、网格布局、信号与槽等内容。## 项目截图
基于单片机的简易
计算器
设计.doc
目录 引言 1 第一章 设计原理及要求 2 1.1 设计方案的确定 2 1.2 系统的设计方案 2 1.3 系统的设计要求 2 第二章 硬件模块设计 4 2.1 单片机AT89C51 4 2.1.1 AT89C51芯片的特点 5 2.1.2 管脚说明 5 2.1.3 振荡器特性 7 2.1.4 芯片擦除 7 2.2 键盘控制模块 7 2.2.1 矩阵键盘的工作原理 8 2.2.2 键盘电路主要器件介绍 8 2.3 LCD显示模块 10 2.3.1 显示电路 11 2.3.2 LCD1602主要技术参数 11 2.3.3 引脚功能说明 11 2.4 运算模块(单片机控制) 12 第三章 软件设计 14 3.1 功能介绍 14 3.2系统流程图 14 3.3 程序 16 第四章 系统调试 17 4.1软件介绍 17 4.1.1 Keil uVision2仿真软件简介 17 4.1.2 protues简介 17 4.2 软件调试 18 4.2.1 软件分析及常见故障 19 4.2.2 仿真结果演示 20 4.3 硬件调试 21 结束语 23 参考文献 24 附录 25 致谢 36 引言 计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫
做
算筹 。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布 袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一 项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔 算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能
做
加、减、乘、除 、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅 带动了
计算器
的发展,也为现代
计算器
发展奠定了良好的基础,成为现代社会应用广泛 的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一 部机械式
计算器
,在他的
计算器
中有一些互相联锁的齿轮,
一个
转过十位的齿轮会使另
一个
齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现 在另
一个
窗口中,但是它只能
做
加减运算。1694年,莱布尼兹在德国将其改进成可以进 行乘除的计算。此后,一直到20世纪50年代末才有电子
计算器
的出现。 第一章 设计原理及要求 1.1 设计方案的确定 本设计是以单片机AT89C51为核心的简易
计算器
设计,要通过芯片AT89C51
实现
计算器
程序运行来完成加、减、乘和除的简单计算功能。 本设计运算模块由AT89C51
实现
,数据输入模块由4*4矩阵键盘电路
实现
,输出数据模 块由LCD显示电路
实现
,再外加
一个
时钟电路和
一个
复位电路完成整个简易
计算器
的设计 。 1.2 系统的设计方案 本设计由以下几部分组成:AT89C51单片机系统(运算模块)、键盘电路、显示电路 、时钟电路和复位电路构成,
计算器
系统框图如图1-1所示。 图1-1
计算器
系统框图 1.3 系统的设计要求 为了更好地
实现
系统的功能,硬件电路的设计应该遵循以下原则: 1、优化硬件电路 采用软件设计与硬件设计相结合的方法。尽管采用软件来
实现
硬件系统的功能时,也 许
响应
的时间会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但是,用 软件
实现
硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统的时 候,在满足可靠性和实时性的前提下,尽可能地通过软件来
实现
硬件功能。 2、可靠性及抗干扰设计 根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且, 所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统 的设计思想是在满足功能的情况下争取较少数量的芯片。 3、灵活的功能扩展 功能扩展是否灵活是衡量
一个
系统优劣的重要指标之一。一次设计往往不能完全考虑 到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原 有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系 统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。 根据提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。
计算器
主要 由以下一些功能模块组成:非编码键盘模块、运算模块(单片机内部)和LCD液晶显示模 块等。 该系统的硬件设计采用了模块化的设计方法。AT89C51单片机、LCD液晶显示屏显示电 路和键盘电路是整个电路的核心,它们能
实现
系统的功能要求。 简易
计算器
主要包括:键盘电路、运算电路和输出显示电路。 第二章 硬件模块设计 在本设计中主要用到的硬件:单片机AT89C51、液晶显示屏LCD1602 、4*4矩阵键盘。 单片机AT89C51的硬件资源分配
基于单片机的智能
计算器
.rar
设计
一个
键盘及显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无
响应
。利用此系统可分别可输入两个数,
实现
两个十进制数的
加减乘除
运算并将结果以十进制形式显示出来 本设计采用矩阵键盘输入,LCD1602显示 本文档包含程序代码、Proteus仿真图、设计报告
Java SE
62,614
社区成员
307,326
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章