0

たくさんのパネルを配置しましたCardLayout。ここで、n番目のパネルは、(n-1)番目のパネルで発生した状態の変化に依存します。を使用するため、事前にすべてのパネルを初期化して追加するCardLayout必要があります。そのため、状態の管理が必要以上に難しくなります。

Javaまたは一部のサードパーティのオープンソースライブラリは、CardLayout構成パネルを遅延的に初期化するバリエーションを提供しますか?つまり、表示される直前に初期化されますか?

編集:

おそらく私は問題を明確に述べていませんでした。もう一度やり直します。

事前にパネルを設定する必要がありCardLayoutますが、表示されるまで初期化したくありません。これは、前のステージからの状態変化が透過的に次のステージに伝播されるようにするために必要です。

私の現在のコードでは、次のようになっています。

cardsPanel.add(ReadMePanel.create(this), ReadMePanel.ID);
cardsPanel.add(LicencePanel.create(this), LicencePanel.ID);
cardsPanel.add(InstallationPathPanel.create(this), InstallationPathPanel.ID);
cardsPanel.add(
  ExtractionProgressPanel.create(
    this,
    new NormalizedPath(appContext.getParameter("zipFilePath")),
    new NormalizedPath(appContext.getInstallationDirectory().toString())
  ), 
  ExtractionProgressPanel.ID
);

ここでInstallationPathPanel、ユーザーはデフォルトのインストールディレクトリとは異なるインストールディレクトリを選択できます。ExtractionProgressPanelこのディレクトリに特定のzipファイルを抽出することになっています。遅延初期化された場合ExtractionProgressPanel、ユーザーが選択したパスは、私が特別なことをすることなく、そのパスに伝播されます。

問題が今明らかになっていることを願っています。

4

1 に答える 1

3

CardLayoutメソッドを呼び出す前に、パネルを初期化して右側に追加できるshowため、問題はありません。

編集

したがって、現在電話をかけている場所ではCardLayout#show、最初にを実行しadd、次にshow

ウィザードを作成しようとしているように見えるので、次の記事から始めるのがよいでしょう。

于 2012-06-05T11:38:09.840 に答える