2011-05-12 38 views
1

我有一组JPanel排列在CardLayout中。问题是,当我在一个JPanel中更改内容时,我想要将更改反映到另一个JPanel中,该另一个JPanel是同一卡片中的卡片。我在每个JPanel对象上定义了一个refresh()方法,但我无法使用用于移动卡的语法调用它们。 (这里P是对的扑克牌容器卡)根据CardLayout中另一张卡的输入更新一张卡的(JPanel)内容

CardLayout cardLayout=(CardLayout)(p.getMenuCard().getLayout()); 
cardLayout.show(p.getMenuCard(),"Card name"); 

我要调用刷新()方法,但我不知道该怎么做,在CardLayout。请帮忙。

+0

哪些东西是你改变的,你添加或删除了一些JComponents – mKorbel 2011-05-12 11:50:40

+1

你的问题不是很清楚。关于你展示的代码片段,如果getMenuCard返回一个“卡”面板,那么它的布局不是CardLayout。 CradLyout是您的卡面板的父面板使用的布局。 – jfpoilpret 2011-05-12 12:34:46

回答

3

如果我们假设每个“卡”面板实现定义refresh()方法的接口,那么你可以做:

interface Refreshable { 
    void refresh(); 
} 

class Card1 extends JPanel implements Refreshable {...} 
... 

// Changing the selected card panel 
cardlayout.show(deckpanel, "card name"); 
for (component card: deckpanel.getComponents()) { 
    ((Refreshable) card).refresh(); 
} 

这是根据我对你的问题的理解。不要犹豫,编辑你的问题来澄清,如果这不能解决你的问题。

+0

是的,它确实有效。非常感谢你。但在此之前我还没有看到你在这里使用过的概念。您将JPanel转换为Refreshable类型,然后调用refresh()方法。 – 2011-05-12 13:38:49

+0

刚才看到我忘了在我的例子中设置Card1面板实现刷新。只是解决这个问题,使代码更清晰。 – jfpoilpret 2011-05-12 14:07:59

1

我有一组JPanel排列在 CardLayout中。问题是,当我在一个JPanel中更改东西时,我想要 所做的更改将反映在另一个 JPanel中,该JPanel是同一个 卡片中的卡片。我在这些JPanel 对象的每一个上定义了一个refresh()方法 对象,但我无法使用 用于移动 卡的语法来调用它们。 (这里P是对的扑克牌容器卡 )

的一件事(CardLayout和交换JPanels)无关与其他(基于另一个类的状态一类的状态变化)。你需要的是,任何一个类都会进行初始更改,以便将这些信息“推送”到应该响应更改的其他类,通常是通过从第二个类调用setter方法。另一种选择是让第二个类通过使用侦听器(可能是PropertyChangeListener)从第一个类“拉”信息。但是,再次,这些解决方案 - 或任何解决方案 - 都与CardLayout或交换视图有关。

有关您当前情况的更具体建议,请考虑创建一个没有外部依赖关系(图像,数据库等)的小型可编译且可运行的应用程序,并演示您的问题,并在此处发布。

相关问题