我在NetBeans中编写了一个计算器,它运行良好。但是,我必须实际单击按钮以插入数字,并尝试使用KeyListener来解决这个问题。我将所有数字和功能按钮设置在JPanel命名按钮内。我在一个名为display的JPanel中有我的显示标签。
我将我的类设置为实现KeyListener,并插入了KeyPressed,-Typed和-Released方法;但是我从那里停留了。我不确定如何使我的按钮实际上听取KeyPressed事件,当它听到事件时 - 激活按钮。此外,我的按钮以其编号命名(例如,零按钮被命名为零,一个按钮是一个,等等。)
我已经读过你实际上必须使用:something.addKeyListener(something)在某处实现KeyListener; 但我似乎无法弄清楚这一点。
我可以在这里得到一些帮助吗?我是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行代码),我无法编辑任何一行。如果我能提供更多有用的信息,请告诉我。
答案 0 :(得分:4)
焦点会出现问题,如果有,我该怎样解决这个问题?
是的,重点可能存在问题。这就是为什么你不应该使用KeyListener。
Swing旨在与Key Bindings一起使用。那就是你创建一个行动来做你想要的。然后可以将此Action添加到您的JButton中。它也可以绑定到KeyStroke。所以你有可靠的可重用代码。
阅读How to Use Key Bindings上的Swing教程以获取更多信息。键绑定没有您目前的焦点问题。
答案 1 :(得分:1)
我不确定我是否完全理解你的问题,而且一些代码会有所帮助,但我会采取一些措施,因为这听起来像我以前经常遇到的问题。
听起来,您的按键被无法识别的原因是焦点在于其中一个按钮。如果您将键盘键添加到按钮,那么您应该没有任何问题。 在netbeans中,您可以非常轻松地在设计屏幕中添加keylisteners。 这是一张图片,向您展示如何将keyPressed侦听器添加到jPanel中的按钮。
private void jButton1KeyPressed(java.awt.event.KeyEvent evt) {
//Check which key is pressed
//do whatever you need to do with the keypressed information
}
能够自己写出听众是很好的,但如果你只是在学习,那么获得尽可能多的帮助也是很好的。 这可能不是最佳解决方案,因为您必须为每个按钮添加侦听器。