1
이론적으로는 눌렀을 때 공개되는 KeyEvent가 트리거되지 않고 문제를 해결하는 웹에서 답변을 찾지 못하는 이유를 알아 내는데 어려움을 겪었습니다.KeyEvents가 트리거되지 않습니다
구현 된 4 개의 키 중 하나를 눌렀다가 놓으면 아무 일도 일어나지 않습니다.
는 (나는 내가 필요로 한 생각에 코드를 줄일 수 있지만, 모든 게시 괜찮다)//Outter Class imports
import javax.swing.*;
import java.util.*;
import java.util.ArrayList;
import java.awt.*;
import java.awt.Image;
import java.awt.image.*;
import javax.imageio.*;
//Inner Class(1) imports
import java.awt.event.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Game extends JPanel {
//fields...
public Game(){
GWin = new JFrame("Space Invaders");
JPanel panel = new JPanel();
panel.setSize(new Dimension(Length, Height));
panel.setLayout(null);
addKeyListener(new KeyInputHandler());
GWin.add(panel);
WindowListener exitListener = new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int confirm = JOptionPane.showOptionDialog(null, "Are You Sure to Close Application?", "Exit Confirmation",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
if (confirm == 0) {
GWin.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
}
};
GWin.addWindowListener(exitListener);
GWin.setExtendedState(Frame.MAXIMIZED_BOTH);
GWin.setUndecorated(true);
GWin.setVisible(true);
requestFocus();
startGame();
}
public static void main(String arg[]) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new WIN(Length ,Height);
}
});
}
private class KeyInputHandler extends KeyAdapter {
/**
* A class to handle keyboard input from the user. The class
* handles both dynamic input during game play, i.e. left/right
* and shoot, and more static type input (i.e. press any key to
* continue)
*/
@Override
public void keyPressed(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
int key = e.getKeyCode();
if (key == KeyEvent.VK_A){
leftPressed = true;
}
if (key == KeyEvent.VK_F) {
rightPressed = true;
}
if (key == KeyEvent.VK_SPACE) {
firePressed = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (waitingForKeyPress) {
return;
}
int key = e.getKeyCode();
if (key == KeyEvent.VK_A) {
leftPressed = false;
}
if (key == KeyEvent.VK_F) {
rightPressed = false;
}
if (key == KeyEvent.VK_SPACE) {
firePressed = false;
}
}
@Override
public void keyTyped(KeyEvent e){
int key = e.getKeyCode();
if (waitingForKeyPress) {
if (pressCount == 1) {
waitingForKeyPress = false;
pressCount = 0;
} else {
pressCount++;
}
}
if (e.getKeyChar() == 27) {
GWin.dispose();
}
}
}
}