키 수신기를 사용하는 작은 응용 프로그램을 프로그래밍하고 있습니다. 특정 키를 누를 때 타이머가 시작되고 해당 키가 해제되면 타이머가 중지됩니다.키를 동시에 누를 때 키를 놓을 때 KeyListener가 트리거되지 않습니다
이제는 한 키를 누를 때만 완벽하게 작동합니다. 3 개의 키를 동시에 누르면 3 개의 타이머가 모두 정상적으로 시작됩니다. 내가 겪고있는 문제는 키가 차례로 해제 될 때입니다. InputMap 및 ActionMap을 사용하여 시도했지만 다른 문제가 발생했습니다.
import java.awt.event.*;
import javax.swing.*;
public class KeyTest extends JFrame implements KeyListener{
private static final int UP_TIMER_DELAY = 200;
// a timer for button "Z"
private Timer upTimer;
// a timer for button "X"
private Timer upTimer2;
public static void main(String[] args)
{
new KeyTest();
}
public KeyTest()
{
this.addKeyListener(this);
this.setSize(800,600); this.setVisible(true);
}
public void keyPressed(KeyEvent e)
{
//When Z is pressed
if(e.getKeyCode()==90)
{
if (upTimer != null && upTimer.isRunning()) {
return;
}
System.out.println("Button_Z is pressed");
upTimer = new Timer(UP_TIMER_DELAY,
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
//Starting the timer for Button "Z" if pressed
upTimer.start();
}
else {
if (upTimer != null && upTimer.isRunning()) {
upTimer.stop();
upTimer = null;
}
}
//When X is pressed
if(e.getKeyCode()==88)
{
if (upTimer2 != null && upTimer2.isRunning()) {
return;
}
System.out.println("Button_X is pressed");
upTimer2 = new Timer(UP_TIMER_DELAY,
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
upTimer2.start();
}
else {
if (upTimer2 != null && upTimer2.isRunning()) {
upTimer2.stop();
upTimer2 = null;
}
}
}
public void keyReleased(KeyEvent e)
{
//When Z is released
if(e.getKeyCode()==90)
{
if (upTimer != null && upTimer.isRunning()) {
upTimer.stop();
upTimer = null;
System.out.println("Button_Z is released");
}
}
//When X is realeased
else if(e.getKeyCode()==88)
{
if (upTimer2 != null && upTimer2.isRunning()) {
upTimer2.stop();
upTimer2 = null;
System.out.println("Button_X is released");
}
}
}
public void keyTyped(KeyEvent e)
{
// Do stuff.
}
}
* "InputMap 및 ActionMap을 사용해 보았지만 다른 문제가 발생했습니다."* 문제를 해결하는 것이 더 어려울 수 있습니다. –
Aaaaaaaand 무엇이 문제입니까? – looper
@looper "Z"키를 누른 상태에서 "X"를 누르고있는 동안 "Z"를 누르고 있으면 "Button_Z is pressed"가 인쇄되고 "Button_X is pressed"라는 다른 줄이 인쇄됩니다. 이제 문제는 "Z"키를 놓을 때 "Button_Z"가 인쇄 되어도 아무 것도 인쇄하지 않는 것입니다. 그것을 컴파일하고 실행하여 실제로 의미하는 것을 확인하십시오. –