import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class GameFrame {
public static void main(String[] args) {
JFrame j1 = new JFrame();
j1.setVisible(true);
j1.setBounds(100,100,570,613);
j1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
j1.add(new GamePanel());
}
}
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
public class GamePanel extends JPanel {
public GamePanel() {
this.addKeyListener(new Listen());
}
class Listen extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_SPACE) {
System.out.println("按了空格");
}
}
}}
uj5u.com熱心網友回復:
要是沒有記錯的話,你得使用匿名的內部類才能解決。【KeyEvent 匿名內部類】隨便百度了一下,湊付看下吧
https://blog.csdn.net/LeoZuosj/article/details/104230051
自己也可以,以此為方向查一查
uj5u.com熱心網友回復:
因為你的GamePanel沒法聚焦,一個組件要回應事件就要先獲得焦點,否則發生的事件也只會是其他正在聚焦的組件而不是你的GamePanel。你可以修改main方法
GamePanel gp = new GamePanel();
j1.add(gp);//最好j1能setLayout
if (gp.isFocusable()) {
gp.requestFocuse(); //主動獲取焦點
}
uj5u.com熱心網友回復:
你這addKeyListener用的就不對啊;
JFrame jf = new JFrame();
jf.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// 獲取鍵值,和 KeyEvent.VK_XXXX 常量比較確定所按下的按鍵
int keyCode = e.getKeyCode();
System.out.println("按下: " + e.getKeyCode());
}
@Override
public void keyTyped(KeyEvent e) {
// e.getKeyChar() 獲取鍵入的字符
System.out.println("鍵入: " + e.getKeyChar());
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("釋放: " + e.getKeyCode());
}
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/76137.html
標籤:Java EE
上一篇:簡單登錄界面代碼問題
下一篇:請問為什么SSM當中SqlSessionFactoryBean是單實體的?通常Dao層和Service層是要用多實體嗎?
