2012-01-14 3 views
0

これは漠然とした質問ですが、私は可能な限り明確にしようとします。私のJavaアプリを初めて起動すると、それはいくつかのファイルとディレクトリが存在するかどうかをチェックすると、インターネット接続をチェックしません。スイングコンポーネントをどのようにプリロードするか

このアプリケーションでは、ダッシュボードに移動することができます。ダッシュボードには、多くのSwingコンポーネントをバックグラウンドパネルに追加して追加する必要があります。これには時間がかかります。

私は、起動時の読み込みプロセス中に、アプリケーションがすべてのSwingコンポーネントImagesなどを読み込んで、ユーザーがコマンドを実行すると即座に表示されるようにする方法を知りました。

JButton = new JButton("blah"); 

が、私はそれはコンポーネントがまだ同時に複数の画像いっぱいSwingコンポーネントを追加することではないだろう、瞬時に表示されるように十分なだかわからない:

私はこのようなすべてのコンポーネントをロードすることができます上に見たようにすでに「ロードされていても」UIスレッドを遅らせる?

ありがとうございます!コンポーネントの

答えて

-1

は、必要なときにそれらが見えるようにするメソッドを作成し、次いで

​​

例えば

setVisible(false) 

を使用して。したがって、あなたがあなたのメソッドを呼び出すときに、コンストラクタですべての設定が、その後に呼び出されるCAは言う:

drawWindow() 

それはその後、唯一自分の絵のメソッドを呼び出すためのsetVisible(true)を呼び出し、画面を無効にする必要があります:)。

この進歩は、* のセットアップを実行することです。つまり、パネルメソッドをチェックして別のスレッド *にロードすることで、順次ロードを待つ必要はありません。あなたの読み込み時に匿名クラスを使用する可能性があります。

SwingUtilities.invokeLater(new Runnable(){ public void run(){ 

    //do my display set up 

}}); 
+5

別々のスレッドを使用する場合は、Swingコンポーネントがスレッドセーフではないことを忘れないでください。あなたは、任意のコンポーネントツリーの更新を行うためにSwingUtilities.invokeLater'または '' invokeAndWait'を使用する必要があります。 –

+0

問題は、既にローディング画面にコンポーネントがあるため、現在はセンターペインからコンポーネントを削除して新しいコンポーネントを追加する必要があります。ローディング画面のコンポーネントとコンポーネントをダッシュ​​ボードに追加した場合表示されているコンポーネントを目に見えないものにしても、完全に忘れてしまったことを追加するための –

+0

良い点キャメロンの歓声:S。エピック - それはあなたが親コンテナで使用しているレイアウトの種類によって異なります。デフォルトのレイアウトを使用している場合はyesを使用しますが、絶対レイアウトを使用してください。これは、コンポーネントスペースを空のままにし、必要な場所に配置する必要があります。ポジションを相対的に設定する) –

関連する問題