本人正在做一个计算器,其中能响应键盘事件,加减乘除怎么实现? 加就直接用+取出a,取出b.int i=Integer.parse(a)+Integer.parse(b); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以的啊:jTextField.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if (e.getKeyCode()==KeyEvent.VK_ADD){ System.out.println(true); } } });试试,^_^ 不要用键盘事件,用普通监听器,然后对该按钮加个shortcut,如同"+"button就叫个VK_ADD jTextField.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if (e.getKeyCode()==KeyEvent.VK_ADD){ System.out.println(true); } } }); 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(); } 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) { } } } operationButton[0].registerKeyboardAction(new ActionListener(){ public void actionPerformed(ActionEvent e) { operationButton[0].doClick(); }}, KeyStroke.getKeyStroke(KeyEvent.VK_ADD, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);当焦点在窗口任何地方, 按下+, 就会发送一个操作+按钮的点击事件. 楼上的你给别人写了那么多,几句注释也没有,你叫别人咋看?其实主要有两点,第一点就是监听器,建议使用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), 这也是一个静态方法 water2004(@-@) 标识符难道可以用汉字表示吗?汉字最高位是1 而字母最高位是0java不是只允许以字母开头的标识符吗? /** 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); // 显示运算结果 } } 可以用汉字。还有两个button类没给出。你自己写吧。应该能写出来 怎样批处理sql语句,跳过出错语句并纪录日志。 "AWT-EventQueue-2" 错误 求Java读写xml并去除部分字段方法 菜鸟提问 请问怎么判断JTextField为空啊?? 请问java里边一个截取String的问题 如何用resourcebundle实现可以自选语言版本? 是用MJ++6.0还是JBuilder,说一说理由 关于combobox 求一个正则表达式? 在Linux下为何不能运行SWT应用程序?(200分) 一个在学习break 和 continue 中遇到的问题?
jTextField.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ADD){
System.out.println(true);
}
}
});试试,^_^
public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_ADD){
System.out.println(true);
}
}
});
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();
}
{
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)
{
}
}
}
public void actionPerformed(ActionEvent e) {
operationButton[0].doClick();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ADD, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
当焦点在窗口任何地方, 按下+, 就会发送一个操作+按钮的点击事件.
其实主要有两点,第一点就是监听器,建议使用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), 这也是一个静态方法
标识符难道可以用汉字表示吗?
汉字最高位是1 而字母最高位是0
java不是只允许以字母开头的标识符吗?
* 操作数? (第一位) 完成后标志位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); // 显示运算结果
}
}