【问题标题】:Showing the previous tab of CardLayout显示 CardLayout 的上一个选项卡
【发布时间】:2010-11-14 16:03:29
【问题描述】:

我很难弄清楚这一点。

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

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

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

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

感谢您的任何建议。

最好的问候

马丁 S.

【问题讨论】:

    标签: java swing cardlayout


    【解决方案1】:

    这带来了一个问题,即您最初是如何获得当前卡的。如果您使用next() 访问当前卡,那么previous() 将让您访问上一张卡,反之亦然。如果你使用first()last(),那么你就不走运了。

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


    更新:既然您知道选项卡名称,那么您可以通过以下方式维护以前的选项卡名称:

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

    【讨论】:

    • 我使用 CardLayout 的 show(parent, tabName) 方法在选项卡之间切换,这似乎需要一些即兴创作,因为 CardLayout API 不提供任何其他选项 :-) 耶 :-p跨度>
    • @Martin S.:那么,你知道之前的tabName,不是吗?只需存储它并使用它返回即可。
    • 是的,但是当我存储 tabName 并使用 show 时,它是当前的而不是前一个,不是吗?
    • 是的,我没有这样想。从我看到你的更新以 2 个变量开始的那一刻起,我就知道你在哪里,谢谢
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      相关资源
      最近更新 更多