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