5

にあるパネルの 1 つJTabbedPaneがクリックされると、最初にいくつかのアクションを実行する必要があります。たとえば、ユーザー名とパスワードを確認する必要があるとします。それらが一致する場合にのみ、特定のパネル操作を実行する必要があります。何か方法を提案できますか?

4

2 に答える 2

8

私はあなたの質問を完全に理解しているとは言えませんが、私は次のようなことをします:

  • ChangeListenerをJTabbedPaneに追加して、最初のタブクリックをリッスンします。
  • 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();
        }
        }
    });
于 2009-06-30T10:53:53.503 に答える
3

タブを変更するアクションは、UI クラスのマウス リスナーによってトリガーされます。クリックされた座標にタブがあるかどうか、ある場合はタブが有効かどうかを確認します。その基準が満たされるとsetSelectedIndex(int)、あなたのJTabbedPane. タブの変更を傍受するためにできることは、オーバーライドsetSelectedIndex(int)して権限チェックをトリガーすることです。権限が検証されると、 を呼び出すことができますsuper.setSelectedIndex(int)。これはあなたが望むことをするはずです。

権限チェックが長時間実行される呼び出し (つまり、データベースまたはサーバーへの呼び出し) である場合はSwingWorker、処理を分割するようなものを使用して、権限チェックがオフに実行されAWT EventQueue、呼び出しsuper.setSelectedIndex(int)が完了するようにする必要があることに注意してください。でAWT EventQueue

于 2009-06-30T11:29:54.117 に答える