【发布时间】:2012-09-26 21:42:23
【问题描述】:
我认为 CardLayout 使用 HashMap 来存储它的对(面板和关联的字符串标识符),但是通过 CardLayout 类我注意到它实际上使用了 Vector。这就是我的理解:当调用show 方法时,它会循环遍历向量的内容,并使用equals 检查这是否是相应卡片的名称,如果是,则循环遍历容器的所有面板以找出当前可见的面板,将其隐藏,然后显示相应的卡片。
如果我正在制作一个具有 很多 不同面板的 gui 应用程序,那么翻转到所需面板不是一种缓慢的技术吗?我是否应该更好地使用自己的方式来显示我的面板,例如将它们存储到数组中并手动使用 add/remove 或 setVisible 而不是使用 CardLayout?这实际上是我开始使用 CardLayout 之前使用的方式。
【问题讨论】:
-
如果您随机获取组件,则与散列相比相对慢,但如果您按顺序获取它们,则速度很快。话虽如此,它的性能仍然非常快。您确定通过使用分析这会导致您的 GUI 的实际和感知性能出现重大瓶颈吗?如果没有,那么我们只是在讨论可以在针头上跳舞的天使的数量。
-
不,我没有尝试测量它,但它似乎比手动方式慢很多,反正也没那么复杂。如果我们按顺序获取组件,为什么会很快?如果我目前在第 18 张牌,我想拿到第 19 张牌,show 方法还是会从头开始循环(两次),还是不循环?
-
好吧,我明白你的意思了,你可能在谈论 next() 但这也会遍历组件,直到找到合适的组件。它只循环一次而不是两次。
-
如果你真的担心
CardLayout的性能,你可以自己动手,使用Map<String, Component>和BorderLayout,就像气垫船指出的那样,除非你'真的看到开关之间的速度大幅下降(这与重绘问题无关),为什么还要麻烦:P -
嗯,我还没有为我的应用程序使用 50 个面板,但是当我这样做时,也许我会回到我自己的方式来展示它们。我只是认为 CardLayout 有一个重要的好处(除了简单性)我在这里错过了,这就是我问的原因......
标签: java swing vector jpanel cardlayout