【发布时间】:2013-06-02 02:46:39
【问题描述】:
我在 NetBeans 中编写了一个计算器,它运行良好。但是,我必须实际单击按钮来插入数字,并尝试使用 KeyListener 来解决这个问题。我将所有数字和功能按钮都设置在一个名为按钮的 JPanel 中。我在一个名为 display 的 JPanel 中有我的显示标签。
我将我的类设置为实现 KeyListener,它插入了 KeyPressed、-Typed 和 -Released 方法;但是我从那里卡住了。我不确定如何让我的按钮真正监听 KeyPressed 事件,以及当它听到事件时 - 激活按钮。此外,我的按钮以编号命名(例如,零按钮被命名为零,一个按钮被命名为一,等等)。
我读到你实际上必须在某处使用以下方法实现 KeyListener:something.addKeyListener(something); 但我似乎无法弄清楚这一点。
我可以在这里寻求帮助吗?我是 Java 新手,这是我的第一个个人项目。如果我没有提供足够的信息,请告诉我。
编辑:我的大部分代码都是 NetBeans 生成的,我无法编辑组件的初始化,这似乎是我认为的问题?
我的班级声明:
public class Calculator extends javax.swing.JFrame implements KeyListener {
//Creates new form Calculator
public Calculator() {
initComponents();
}
我的一个 buttonPressed 动作(都与实际数字的变化相同):
private void zeroActionPerformed(java.awt.event.ActionEvent evt) {
if (display.getText().length() >= 16)
{
JOptionPane.showMessageDialog(null, "Cannot Handle > 16 digits");
return;
}
else if (display.getText().equals("0"))
{
return;
}
display.setText(display.getText().concat("0"));
NetBeans 提供的主要方法:
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Calculator().setVisible(true);
}
});
}
生成的 initComponents() netbeans 非常庞大(大约 500 行代码),我无法对其进行任何编辑。如果我能提供更多有用的信息,请告诉我。
【问题讨论】:
-
你可以发布你的代码吗?
-
我发布了一些代码。我遵循了大约 4 个不同的教程,包括你列出的那个。我似乎无法弄清楚。他们正在 JComponent 上创建一个新的 KeyListener,但我似乎做不到。
-
您可能希望将 所有键 的键侦听器添加到内容面板,而不是每个单独的按钮。
-
如果我将它添加到我的内容面板(我的按钮面板),我需要让面板请求焦点,对吗?如果是这样,我该怎么做?我注意到很多涉及焦点的属性,并且读到必须调用 requestFocus() 方法?
标签: java swing keylistener keyevent actionevent