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 回答