0

いくつかの問題が発生しました。

ステップバイステップで使用する必要があるアプレットを構築しました。各ステップの後、ボタンをクリックすると、次のステップが GUI に追加されます。

問題: ズームしないと、追加されたコンテンツが表示されません。アプリケーションではウィンドウ サイズをスケーリングすることで回避できますが、アプレットではその問題を解決できませんでした。

ありがとう

編集:

実際には、次のようになります。

 Panel cp = new Panel(new GridLayout(0,2));
 Panel Block1 = new Panel(new GridLayout(2,2));
 Panel Block1 = new Panel(new GridLayout(2,2));
  ...

初期化

 public void init()
  {  

   buildBlock1();
   buildBlock2();


    add(cp);
    cp.setVisible(true);
  }

ここにいくつかの空のパネルを追加します。後で埋められるパネルです

private void buildBlock1()
{
Block1.add(panel1);
Block1.add(panel2);
Block1.add(panel3);
Block1.add(panel4);

cp.add(Block1);
}

ボタンアクションリスナー

private void generatePanel1()
 {
  //adding some Components to the subpanel of Block1, which is a subpanel of cp.
 Panel1.add(...);
 cp.repaint();
 cp.validate();
 }
4

1 に答える 1

2

現在、チェックできるコードはありませんが、通常、コンテナーへのコンポーネントの追加 (および削除) は「検証」する必要があります。だから試してみてください

panel.add(...); 
panel.revalidate(); 

の API ドキュメントJComponent.revalidate():

このコンテナーとそのすべてのサブコンポーネントを検証します。

遅延自動レイアウトをサポートします。

invalidate を呼び出してから、このコンポーネントの validateRoot を、検証が必要なコンポーネントのリストに追加します。検証は、現在保留中のすべてのイベントがディスパッチされた後に行われます。つまり、このメソッドが呼び出された後、このコンポーネントの包含階層をたどったときに見つかった最初の validateRoot (存在する場合) が検証されます。デフォルトでは、JRootPane、JScrollPane、および JTextField は isValidateRoot から true を返します。

このメソッドは、このコンポーネントのサイズ、位置、または内部レイアウトが影響を受けるようにプロパティ値が変更されたときに、このコンポーネントで自動的に呼び出されます。この自動更新は AWT とは異なります。これは、通常、プログラムが検証を呼び出して GUI の内容を更新する必要がないためです。検証メソッドは、コンテナにそのサブコンポーネントを再度レイアウトさせるために使用されます。コンテナーが表示された後に、このコンテナーのサブコンポーネントが変更された (コンテナーに追加またはコンテナーから削除された、またはレイアウト関連の情報が変更された) 場合に呼び出す必要があります。

于 2012-06-20T13:57:14.497 に答える