【发布时间】:2017-02-13 18:40:42
【问题描述】:
我有一个我在 Netbeans 中制作的 jframe,这个 jframe 正在由另一个 java 类“启动”,但对于当前的问题并不重要。重要的是我似乎无法弄清楚如何将我的关键监听器添加到我的这个 jframe 中。我已经实现了按键监听器,添加了所需的功能(按键输入、按键按下和按键释放)。但我不知道如何实际添加/启动实际的键监听器,以使其工作。
到目前为止,我已经尝试了两种不同的方法,首先我尝试在代码的开头添加行 addKeylistener(new JFrameList());,其中实际的 jframe 正在启动,但这样做实际的框架甚至不会显示。除此之外,我还尝试在另一个函数callJframFForm() 中添加同一行,该函数在调用 jframe 的同时从另一个类调用。但这只会返回错误non-static method addKeyListener(KeyListener) cannot be referenced from a static context。我不确定还有什么其他方法可以添加关键侦听器,因此正在寻求一些帮助。
目前我的代码如下所示。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class JFrameList extends javax.swing.JFrame implements KeyListener{
public static String keyPresCod = "";
public JFrameList() {
initComponents();
addKeyListener(new JFrameList()); //This is where I am currently trying to call from, but frame won't show
}
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JFrameList().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
// End of variables declaration
static void callJframFForm(){
try {
//This is where I have also tried to add the initialization line
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void keyTyped(KeyEvent e) {
int codeFKey = e.getKeyCode();
if (codeFKey == KeyEvent.VK_A) {
System.out.println("Button A clicked");
keyPresCod = "A";
} else if (codeFKey == KeyEvent.VK_B) {
System.out.println("Button B clicked");
keyPresCod = "B";
} else {
System.out.println("Different key pressed");
keyPresCod = "Another key";
}
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
【问题讨论】:
-
我认为您当前的方法过于矫枉过正,我会看看How to Use Buttons, Check Boxes, and Radio Buttons,因为按钮具有用户习惯使用的预定义工作方式
-
@MadProgrammer -
I'd have a look at...- 很高兴你同意。 -
@camickr 但鉴于 OP 试图解决的问题缺乏上下文,我不知道这是否是答案 ;)
-
非常感谢您的输入,我的代码的全部目的是能够显示已单击计算机键盘上的哪个按钮而不是 JButton。到目前为止,我有很多关于如何更改代码的灵感,所以我必须先检查一下。
标签: java swing netbeans keylistener keyevent