我在CardLayout中安排了一组JPanel。问题在于,当我在一个JPanel中更改内容时,我希望更改能够反映在另一个同一套牌中的JPanel中。我在每个JPanel对象上定义了一个refresh()方法,但是我不能使用用于移位卡的语法来调用它们。 (这里p是卡片组的容器卡)
CardLayout cardLayout=(CardLayout)(p.getMenuCard().getLayout());
cardLayout.show(p.getMenuCard(),"Card name");
我想调用refresh()方法,但我不知道如何在CardLayout中执行此操作。请帮忙。
答案 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并在此处发布