2009-06-30 23 views
5

JTabbedPaneにあるパネルの1つをクリックすると、最初にいくつかのアクションを実行する必要があります。たとえば、ユーザー名とパスワードを確認する必要があるとします。一致した場合にのみ、特定のパネル操作を実行する必要があります。どのような方法を提案できますか?JTabbedPane:選択したタブを表示する前に実行するアクション

答えて

7

ない私は完全にあなたの質問を理解して、私のようなものだろう:最初のタブをクリックをリッスンするためのJTabbedPaneにChangeListenerを追加

  • を。
  • ChangeEventが発生すると、SwingWorkerを使用してバックグラウンドスレッドでログインを実行します。
  • ログインが成功した場合は、イベントディスパッチスレッドで必要なUI操作を実行します。たとえば、

tabbedPane.addChangeListener(new ChangeListener() { 
    private boolean init; 

    public void stateChanged(ChangeEvent e) { 
     if (!init) {           
      init = true; 

      new SwingWorker<Boolean, Void>() { 
       @Override 
       protected void done() { 
        try { 
         boolean loggedIn = get(); 

         if (loggedIn) { 
          // Success so perform tab operations. 
         } 
        } catch (InterruptedException e1) { 
         e1.printStackTrace(); // Handle this. 
        } catch (ExecutionException e1) { 
         e1.printStackTrace(); // Handle this. 
        } 
       } 

       protected Boolean doInBackground() throws Exception { 
        // Perform login on background thread. Return true if successful. 
        return true; 
       } 
      }.execute(); 
     } 
     } 
    }); 
3

タブを変更するためのアクションはUIクラスのマウスリスナーによってトリガーされます。それは通過し、クリックされた座標にタブがあるかどうかチェックし、そうであればタブが有効かどうかをチェックする。その条件が満たされている場合は、JTabbedPanesetSelectedIndex(int)と表示されます。タブの変更を傍受するには、setSelectedIndex(int)を上書きしてアクセス許可チェックをトリガーします。アクセス許可が有効になったら、super.setSelectedIndex(int)に電話をかけることができます。これはあなたが望むことをするはずです。

権限チェックが長時間実行されている呼び出し(データベースまたはサーバーへの呼び出し)の場合は、SwingWorkerなどの処理を分割して、AWT EventQueueの権限チェックが完了するようにしてくださいsuper.setSelectedIndex(int)への呼び出しはAWT EventQueueで行われます。

+0

urx返信用thanx –

関連する問題