0

で、下矢印キーを繰り返し押すと、複数のKeyEventJTableが立て続けに発生します。私の要件は、 last に対してのみ行動する必要があるということですKeyEvent。で使用しようとしていますTimerTaskKeySelectionListener、決定的な結果が得られません。

でどのような変更を行うことができるか考えていますKeyListenerか?

サンプルコード -

addKeyListener(new KeyListener() {


        Timer t = new Timer();
        TimerTask tt;


        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override
        public void keyReleased(KeyEvent e) {

             tt.cancel();
             tt = null;



        }

        @Override
        public void keyPressed(KeyEvent e) {


            if (tt != null)
                return;

            tt = new TimerTask() {
                @Override
                public void run() {

                    System.out.println("Selected-- "+getModel().getValueAt(getSelectedRow(), 2));
                }
            };

           // t.scheduleAtFixedRate(tt, 0, 500);
            t.schedule(tt, 0, 200);



        }
    });

ありがとう

4

2 に答える 2

2

a を使用したアイデア( Swing コンポーネントと対話するため、このクラスTimerを使用することを強くお勧めします) はうまくいくはずです。javax.swing.Timer

繰り返しをfalseに設定し、タイマーが実行されていない場合はキーストロークを受け取ったときにタイマーを開始するか、タイマーが既に実行されている場合はタイマーを再起動します。これにより、最後のキーの処理にわずかな遅延が発生します (遅延 = タイマーで設定した遅延) が、キーストロークごとに反応することは避けてください。

于 2012-06-08T12:15:15.583 に答える
0

タイマーのみ使用しました。リスナーで KeyEvent の参照を維持し、別の KeyEvent が事前定義された遅延 (テスト用に 1 秒保持) で受信された場合、新しいイベントが参照されます。したがって、新しい keyEvent が 1 秒間ない場合、最後に参照されたイベントが後続の処理に使用されます。今のところ機能しています。ご意見をお聞かせください。

addKeyListener(新しいKeyListener() {

        KeyEvent eventToProcess;
        Timer t = new Timer();
        TimerTask tt;


        @Override
        public void keyTyped(KeyEvent e) {

        }

        @Override
        public void keyPressed(KeyEvent e) {

            if(tt != null){
                tt.cancel();
                tt = null;
            }


        }

        @Override
        public void keyReleased(KeyEvent e) {

            eventToProcess = e;

            tt = new TimerTask() {
                @Override
                public void run() {

                    System.out.println("Selected-- "+getModel().getValueAt(getSelectedRow(), 2)+"  Key Event > "+eventToProcess.getKeyChar());
                }
            };

            t.schedule(tt, 1000);
          }
    });
于 2012-06-14T09:53:22.380 に答える