1

Netbeans でJinputと Javaを使用して、非常に小さなプロジェクトに取り組んでいます。ユーザーがキーボードの をJFrame押したときにアラーム ウィンドウをポップアップし、ユーザーが を離したときにアラーム ウィンドウを終了するとします。私のコードでは、最初のプレスダウンで開いて閉じることができなかったので、while ループで動けなくなったようです。私が調査したところ、使用する方が良い方法であることがわかりました。しかし、私はこれが初心者なので、タイマーを使用するさまざまな方法がすべて私をさらに混乱させました。誰かが私のコードを見て、正しい方向に向けてくれませんか?'K'JFrame'k'JFramejavax.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 です。

私はそれに取り組んでいましたが、ここに私の更新されたコードがあります:

public void startPolling() {

    Timer timer = new Timer(50, new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            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.dispose();
                 }
              }
           }
           System.out.println(buffer.toString());
        }

     try {
        Thread.sleep(20);
     } catch (InterruptedException f) {
        f.printStackTrace();
     }


        }

}); timer.start();
4

1 に答える 1

0

ウィンドウを開閉したいだけなら、タイマーを使いますか?単純なタスクのための非常に複雑なコードがあります。ComponentListenerをJFrameに追加して、次のように非表示にすることができます。

frame.addComponentListener(new ComponentAdapter(){

 public void componentMoved(ComponentEvent e) {
     if (popup.isVisible()){
         popup.setVisible(false);
     }
  }
  });
于 2012-11-14T13:16:55.413 に答える