1

私はと呼ばれるjListを持っていますtodoList

ユーザーがリスト内の項目をクリックすると、選択されたままになります。しかし、マウスがjListを出る400ミリ秒後に、リストで現在選択されている項目を「単独で」選択解除したいと思います。

これは、リストで既に選択されているものがある場合にのみ実行する必要があります。

私はNetbeans IDEを使用していますが、これはこれまでに試したことです:

private void todoListMouseExited(java.awt.event.MouseEvent evt) {                                     
    if (!todoList.isSelectionEmpty()) {
        Thread thread = new Thread();
        try {
            thread.wait(400L);
            todoList.clearSelection();
        } catch (InterruptedException ex) {
            System.out.println(ex);
        }
    }
}

 private void todoListMouseExited(java.awt.event.MouseEvent evt) {                                     
    if (!todoList.isSelectionEmpty()) {
        Thread thread= Thread.currentThread();
        try {
            thread.wait(400L);
            todoList.clearSelection();
        } catch (InterruptedException ex) {
            System.out.println(ex);
        }
    }
}

これらは両方とも、すべてが機能しなくなるだけです。

私のプロセスは、400ミリ秒待機してからjListのclearSelection()メソッドを実行する新しいスレッドを作成する必要があるということでした。これは、マウスがリストを終了するたびに発生し、リストに既に選択されているものがある場合にのみ実行されます。

私の問題を十分に説明していることを願っています。

4

2 に答える 2

3

問題は、 (スリープObject#waitではなく)通知を待っていることですが、これは起こっていません。代わりに、タイムアウトによりへの呼び出しがバイパスされます。InterruptedExceptionclearSelection

Threadsアプリケーションで rawを使用しないでくださいSwing。代わりにSwing Timer、Swing コンポーネントと対話するように設計された を使用してください。

if (!todoList.isSelectionEmpty()) {
   Timer timer = new Timer(400, new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         todoList.clearSelection();
      }
   });
   timer.setRepeats(false);
   timer.start();
}
于 2013-04-08T20:26:55.880 に答える