Java 使用Jinput弹出JFrame窗口警报

Java 使用Jinput弹出JFrame窗口警报,java,swing,timer,jinput,Java,Swing,Timer,Jinput,使用Netbeans中的Java和Java,我正在做一个非常小的项目,当用户按下键盘上的'K'时,它会弹出一个JFrame报警窗口,当用户放开'K'时,它会终止JFrame报警窗口。在我的代码中,当JFrame在第一次按下时打开并且似乎无法关闭时,我似乎陷入了while循环。我研究发现使用javax.swing.Timer是更好的方法。然而,由于我是一个新手,所有不同的使用定时器的方式让我更加困惑。有人能看一下我的密码并给我指出正确的方向吗 这是我的密码 public void startPol

使用Netbeans中的Java和Java,我正在做一个非常小的项目,当用户按下键盘上的
'K'
时,它会弹出一个
JFrame
报警窗口,当用户放开
'K'
时,它会终止
JFrame
报警窗口。在我的代码中,当
JFrame
在第一次按下时打开并且似乎无法关闭时,我似乎陷入了while循环。我研究发现使用
javax.swing.Timer
是更好的方法。然而,由于我是一个新手,所有不同的使用定时器的方式让我更加困惑。有人能看一下我的密码并给我指出正确的方向吗

这是我的密码

public void startPolling() {
    while(true) {
        ControllerEnvironment.getDefaultEnvironment().getControllers();                
        ca[index].poll();  
        EventQueue queue = ca[index].getEventQueue();
        Event event = new Event();
        while(queue.getNextEvent(event)) {
           StringBuffer buffer = new StringBuffer(ca[index].getName());
           buffer.append(" at ");
           buffer.append(event.getNanos()).append(", ");
           Component comp = event.getComponent();


           buffer.append(comp.getName()).append(" changed to ");
           float value = event.getValue(); 
           if(comp.isAnalog()) {
              buffer.append(value);
           } else {
              if(value==1.0f) {
                 buffer.append("On");
                 if ("K".equals(comp.getName())){
                    alarmBox();
                 }
              } else {
                 buffer.append("Off");
                 if ("K".equals(comp.getName())){
                    alarmBox.setVisible(false);
                 }
              }
           }
           System.out.println(buffer.toString());
        }
  }      
}
alarmBox()是我的JFrame

我正在进行这项工作,以下是我的更新代码:

公开作废启动票(){


若你们只想打开和关闭窗口,你们想用定时器吗? 对于一个简单的任务,您有一个非常复杂的代码。 您可以将ComponentListener添加到JFrame以隐藏,如下所示:

frame.addComponentListener(new ComponentAdapter(){

 public void componentMoved(ComponentEvent e) {
     if (popup.isVisible()){
         popup.setVisible(false);
     }
  }
  });

我实际上在做一个更大的项目,但我把它缩小了,这样我才能更好地理解它。我的目标是用户按下一个字母,当用户放开JFrame时,会弹出一个JFrame。我从上一篇文章开始就一直在做这个项目,这是我的代码:所以当它失去焦点时,你不能处理它吗?我不能处理JF我在第一篇文章中发布了我的更新代码…如果这些听起来很愚蠢,我道歉,我是个新手。
frame.addComponentListener(new ComponentAdapter(){

 public void componentMoved(ComponentEvent e) {
     if (popup.isVisible()){
         popup.setVisible(false);
     }
  }
  });