2012-01-08 5 views
0

私はJFileChooserを起動するJButtonを持っています。しかし、JFileChooserは、しばしば何も起こっていないと思うかもしれない時間の間に、アップに数秒かかります。私は、JFileChooserが終了するまでボタンを無効にしようとしましたが、JFileChooserがロードされるまで、ボタンの無効化は行われません。私ができることはありますか? マイコード:UIスレッドがそのビジネスについて行っている間に、ボタンが押されたよりもユーザーにフィードバックを提供する方法

public void actionPerformed(ActionEvent e) { 
    System.err.println("clicked"); 
    ((JButton) e.getSource()).setEnabled(false); 
    System.err.println("set"); 
    JFileChooser b = new JFileChooser("C:\\"); 
    b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
    int res = b.showOpenDialog((Component) e.getSource()); 
    if (res == JFileChooser.APPROVE_OPTION) { 
     try { 
      //Blah 
     } 
     catch (Exception err) { 
      JDialog j = new JDialog(window, "An error occured:\n" + err.getMessage()); 
     } 
    } 
    ((JButton) e.getSource()).setEnabled(true); 
} 

答えて

3

移動し、これらのラインは...アクションは、アクションリスナーのコンストラクタにメソッドを行っ..from

JFileChooser b = new JFileChooser("C:\\"); 
b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

..それらへの変更

b = new JFileChooser("C:\\"); 
b.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

..その後宣言する..

private JFileChooser b; 

はクラス属性なので(実行されたアクションで表示されるため)

さらに詳しい名前を付けることもできます。


チューは、クラスが作成されたときに構成されており、必要なときに使用するために準備ができます。これには、チューザーが位置、サイズ、パスのファイル表示タイプ&を覚えているという追加の利点があります。その後、ユーザーがボタンをアクティブにします。


さらに別の戦略は、クラス属性としてチューを宣言がコンストラクタでないインスタンス化にそれを行うが、それはnullであれば実行されたアクションにチェックし、もしそうなら、それを作成して設定することです。続き

...


私はかなり独自のスレッドに値しない、いくつかの点で少し遅く、このような何かをしたい場合があります。

私が概説した最後の戦略では、今追加するものを追加することを検討していました。


..Continued

..Ofコースは、その最後の方法は、一度だけ、ユーザー第一は、ボタンをクリックしたときに、正確にあなたが記述同じ問題を与えるが、します。そのような状況の場合は、の中からJProgressBarの不確定のJOptionPaneをポップすることをお勧めします。

明らかに、は新しいThreadを作成しますが、OTOHのThreadオブジェクトは安価です。どのアプリでもいくつか実行されています。 GUIで。カップル以上は怪我をしません。

+0

ありがとう、それは私が必要としたものです。それでも、私がやろうとしていることをする方法はありますか?私は、ある時点でこれほど少し遅いものをやりたいと思うかもしれないという印象を受けます。それはそれ自体のスレッドに値するものではありません。 –

+0

アクションが完了するまで単にボタンを無効にする簡単な方法はありませんか? SwingWorkerでスローパート(JFileChooserを作成する)を実行しても、JFileChooserがロードされる前にアクションが終了するか、またはボタンがまだロードされていない状態では無効にならないという印象を受けます。 –

+0

ファイルチューザが一度しか作成されないアプローチの場合、最後のファイルが選択された場所からディレクトリを保存すると非常にユーザーフレンドリーです。次にユーザーがそのボタンを押すと、そのディレクトリに開かれているファイルチューザーが表示されます。 – Robin

関連する問題