根据CardLayout中另一张卡的输入更新一张卡(JPanel)内容

时间:2011-05-12 11:44:15

标签: java swing cardlayout

我在CardLayout中安排了一组JPanel。问题在于,当我在一个JPanel中更改内容时,我希望更改能够反映在另一个同一套牌中的JPanel中。我在每个JPanel对象上定义了一个refresh()方法,但是我不能使用用于移位卡的语法来调用它们。 (这里p是卡片组的容器卡)

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

我想调用refresh()方法,但我不知道如何在CardLayout中执行此操作。请帮忙。

2 个答案:

答案 0 :(得分: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();
}

这是根据我对你的问题的理解。如果这不能解决您的问题,请不要犹豫,编辑您的问题以进一步澄清。

答案 1 :(得分:1)

  

我安排了一套JPanels   CardLayout。问题是,当我   我想要改变一个JPanel中的东西   变化将反映在另一个   JPanel就是一张卡片   甲板。我有一个refresh()方法   在每个JPanel上定义   对象,但我无法使用它们   用于移位的语法   牌。 (这里p是集装箱卡   对于卡片组)

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

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