2014-09-20 79 views
0

我正在构建一个计算器应用程序,让我的头与Swing构建GUI。我希望能够点击计算器按钮,还可以在键盘上输入它们。听按键或按钮按

我一直在寻找KeyStroke,但我不完全确定如何在我目前的JButton ActionListener中实现它。

这里有一个按钮按下的一个样本:

public void actionPerformed(ActionEvent e) { 
    if(e.getSource()==btn1){ 
     if(calcOperatorActive){display.setText("1");calcOperatorActive=false;} 
     else if(calcOperator=="equals"){display.setText("1");calcTempMem=0;calcOperator="none";} 
     else{display.setText(display.getText()+"1");} 
    } 

我希望能够在if语句,东西线沿线的添加一个关键听众:

if((e.getSource()==btn1)|(KeyStroke.getKeyStroke("1")){ 
    //the code 
} 

,但我得到说错误无法比较布尔值和KeyStroke。

+0

您将需要将键绑定与诸如AbstractActions之类的操作组合在一起。 – 2014-09-20 21:18:38

回答

2

这不是有效的Java:

if((e.getSource()==btn1)|(KeyStroke.getKeyStroke("1")){ 
    //the code 
} 

因为布尔表达式的第一部分,在这里

(e.getSource()==btn1) 

一个布尔表达式,很不错的,但不能因此第二部分:

(KeyStroke.getKeyStroke("1") 

对于if表达式来处理复合波olean测试,布尔测试必须是一个实际的布尔表达式。因此,在您的情况进行有效的Java,你需要

if (booleanExpression1 || booleanExpression2) { 
    //... 
} 

或两个语句必须是评估为真或假,并再次,你的第二个声明布尔表达式,(KeyStroke.getKeyStroke("1")


OK,但这只是你的代码/问题的第一个问题。另一个问题是没有可用于击键部分的布尔表达式,因为这不是Java处理KeyStrokes的方式。相反,你会想要使用键绑定(而不是KeyListener)。

例如,请看看camickr对类似问题here的回答。