CardLayout:如何显示某一类面板在另一大类的ActionListeners?(CardLay

2019-10-20 01:20发布

我将我的buttonsJPanel (其中有一个border layout ,增加了按键的south位置),然后添加another JPanel cardsPanel在( center父面板中的位置),并赋予它一个CardLayout我想这cardsPanelcontainer的卡 (我的意思是,这将共享相同的屏幕空间面板)。

现在我需要做的是显示这些卡(我打电话,这将共享相同的屏幕空间的卡板)作为父面板的按钮的响应。 但按键位于父面板及其作用的听众显然将设在那里了。

所以,问题是,我怎么show (由cardLayout.show()位于容器类(与面板Cardlayout ),在位于另一个类(带有按钮的响应BorderLayout )?


编辑-关于产品ACTION: -

我希望能找到一个执行Action比更为有用ActionListener我还读它们可以被重复使用,并且用于执行相同功能的按钮。 我有执行翻转特定卡(即显示在CardLayout特定面板)的功能的几个按钮。 我已经写了只有一个内部类,我想用它为所有的按钮。

因此,我将喜欢通过按钮标识符(用于标识一个按钮,当我们将按钮添加到它的父例如字符串String btnIdentifier= "1"; panel.add(button1, btnIdentifier); ),以该方法的actionPerformed()的这个类,定义虽然我们从来没有显式调用的actionPerformed()。 那么,如何可以通过按钮的字符串标识符的actionPerformed()方法,这样我可以使用相同的Action为我所有的按钮。

最少的代码: -

class Action extends AbstractAction{
            Action(String text, ImageIcon icon){
                super(text, icon);

            }
            public void actionPerformed(ActionEvent e) {
                button1.setBorderPainted(true);
                button1.setContentAreaFilled(true);
                if (btnIdentifier=="1"){  //////ASSUMING THAT BUTTON IDENTIFIER HAS SOMEHOW BEEN PASSED TO THIS METHOD
                    FirstCard firstCard= new FirstCard();
                    cardsPanel.add(firstCard, btnIdentifier);
                    cardLayout.show(cardsPanel, btnIdentifier);
                } else if (btnIdentifier=="2"){  //////ASSUMING THAT BUTTON IDENTIFIER HAS SOMEHOW BEEN PASSED TO THIS METHOD
                    SecondCard secondCard= new SecondCard();
                    cardsPanel.add(secondCard, btnIdentifier);
                    cardLayout.show(cardsPanel, btnIdentifier);
                } else if (btnIdentifier=="3"){  //////ASSUMING THAT BUTTON IDENTIFIER HAS SOMEHOW BEEN PASSED TO THIS METHOD
                    ThirdCard thirdCard= new ThirdCard();
                    cardsPanel.add(thirdCard, btnIdentifier);
                    cardLayout.show(cardsPanel, btnIdentifier);
                } 
            }
        }
        }

Answer 1:

Action来封装所需的功能。 使所述封闭面板的参考可见,如图这里和在这里 ; 或导出Action从一个具有类(至少) 包私有访问,如图所示在这里 。



文章来源: CardLayout: How to show panels in one class in the ActionListeners in another class?