3

我很难弄清楚这一点。

这种情况不难想象,所以我希望我可以在没有示例代码的情况下发布这个。我有带有 CardLayout 的 JPanel。该面板包含几个其他面板作为单独的选项卡。我想要实现的是创建一个 JButton ,它将使主面板显示最后打开的选项卡(显示当前选项之前的选项卡)。起初我认为没什么大不了的。

所以我开始思考如何获取当前可见的选项卡(面板),并发现 Panel 中没有本机方法,或者更确切地说 CardLayout 只包含方法 first()、last()、next() 和 previous()这对我没用。

然后我想也许为了实现我的目标,我可能会检查主面板的所有组件并测试哪个是可见的,哪个是当前的。我发现它有点复杂,很好,但是如果我没有它的卡名来调用 CardLayout 方法 show(parent, name),我如何让 CardLayout 显示这个面板?

在这一点上,我不知道。我一直在互联网上搜索,但没有找到解决方案,只有很少有人试图找出类似的东西。所以我希望已经解决过这类问题的人能遇到这个话题:-)

感谢您的任何建议。

最好的祝福

马丁·S。

4

2 回答 2

2

这带来了一个问题,即您首先是如何获得当前卡的。如果您曾经使用next()过当前卡,则会previous()将您带到上一张卡,反之亦然。如果你使用first()or last(),那么你就不走运了。

当然,您总是可以复制 存储的一些信息CardLayout来实现您的目标:如果您维护一个组件名称数组(并在您调用时更新它addLayoutComponent)以及以前的索引(并使用next,previous和其他调用更新它),然后您只需查找上一个组件的名称并使用它show来显示上一张卡片。


更新:由于您知道选项卡名称,因此可以通过以下方式维护以前的选项卡名称:

String prevTab, curTab;

public void showTab(String newTab) {
  prevTab = curTab;
  curTab = newTab;
  layout.show(parent, curTab);
}

public void goBack() {
  layout.show(parent, prevTab);
}
于 2010-11-14T17:38:50.897 回答
0

您可以创建地图对象 Map。并将面板和名称添加到卡片布局和地图中。之后,如果您有之前显示的 JPanel,您可以通过 map.get(JPanel p) 从地图中获取它的名称。并且要找到之前可见的 JPanel,您需要将 ComponentListener 添加到每个 JPanel。并使其更改 componentHidden 事件上的一些静态变量(例如静态 JPanel prev_shown)。

于 2010-11-14T17:44:24.767 回答