1

新しいコンポーネントが追加された瞬間に、プログラムに gui (またはその一部) を検証して再描画させる必要があります。コンポーネントが画面に描画されるまで絶対に何もしないでください。その後、コードを続行できます。

階層化された JPanel 構造を作成しています。それぞれが一連の JPanel を含む一連の JPanel を継続する一連の JPanel。

第 3 レベルの JPanel を作成するとき、まだ描画されていない第 1 レベルの JPanel からデータを取得する必要があります。これにより、間違ったデータが返され、セットアップ全体が台無しになります。

第 1 レベルの JPanel は、マスター for ループ (第 1 レベルの JPanels を通過するもの) が完了した後にのみ描画されます。

プログラムが作成されて親に追加されるとすぐに描画するようにプログラムに強制するにはどうすればよいですか? ここですべてが EDT 内で行われていることを確認しました。再描画と検証はまったく機能しませんでした。

編集:わかりました、私はRobinsソリューションを使用しました。

ただし、コード内の行が実行されるとすぐに、即時の GUI 更新を強制する方法はありますか (finins への for ループや同様のものに反対します)。可能であれば、何かをデバッグする方がはるかに簡単です。insta-update が他のすべてのスレッドを一時停止することを意味する場合でも。

4

2 に答える 2

3

第 3 レベルの JPanel を作成するとき、まだ描画されていない第 1 レベルの JPanel からデータを取得する必要があります。これにより、間違ったデータが返され、セットアップ全体が台無しになります。

最初に、この設定をより安全なものに変更することをお勧めします。UI 要素の描画順序に依存しなければならないことは、厄介な問題の良い原因のように思えます。

第 1 レベルの JPanel は、マスター for ループ (第 1 レベルの JPanels を通過するもの) が完了した後にのみ描画されます。

プログラムが作成されて親に追加されるとすぐに描画するようにプログラムに強制するにはどうすればよいですか? ここですべてが EDT 内で行われていることを確認しました。再描画と検証はまったく機能しませんでした。

EDT をブロックしているため、機能しません。repaintand/orを呼び出しvalidateても、実際には再描画はトリガーされません。代わりに、1 つをスケジュールします。Runnableマスター ループを、それぞれ EDT でスケジュールするいくつかの個別の に分割することを試みることができます。Runnableこれにより、repaint呼び出しによってスケジュールされたものが間に入る可能性があります。ただし、その保証はありません。

于 2013-03-14T23:43:35.050 に答える