1

我无法弄清楚 CardLayout 的 JavaDocs。我有一个 Applet,从这个 Applet 中我创建了 5 个扩展 JPanel 的类。在这些类中,到目前为止所做的只是设计(一些 GUI 组件)。现在我想通过 Applet 将所有这些类链接在一起,以便一次查看一个面板(CardLayout)。因此,我将能够从我的 Applet 中使用 CardLayout 的下一个方法来查看下一个面板。这是我的代码:

setLayout(new CardLayout());

add(mainView);                //mainView, managerView, searchView, storesView and hoursView
add(managerView);             //   are initialized
add(searchView);
add(storesView);
add(hoursView);

这是我的事件处理代码:

public void actionPerformed(ActionEvent e)
{
    CardLayout cl;                        //CardLayout object to manipulate the next page

    cl = (CardLayout)(this.getLayout());

    if(e.getSource() == mainView.getManagerButton())
    {
        cl.next(this);
    }
    if(e.getSource() == mainView.getSearchButton())
    {
        cl.next(this);              //if the user hits the searchButton I want to link to panel
        cl.next(this);              //   searchView. Is that correct?
    }
}

使用此代码,我得到一个 IllegalArgumentException

有人请指出我的错误!我还为代码中的问题提供了一些注释。一如既往,谢谢!

4

2 回答 2

2

将面板添加到卡片布局时,您没有使用任何约束来识别每张卡片。然后你可以直接跳转到特定的卡。

有关工作示例,请参阅如何使用卡片布局。

于 2011-12-05T02:35:17.613 回答
0

为了更清楚,从@camickr 提供的链接中复制了一些片段

面板的创建

//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(card1, BUTTONPANEL);
cards.add(card2, TEXTPANEL);

whereBUTTONPANELTEXTPANEL是字符串。不同面板之间的切换是通过调用来完成的

CardLayout cl = (CardLayout)(cards.getLayout());
cl.show(cards, (String)evt.getItem());

evt.getItem()等于BUTTONPANELTEXTPANEL

于 2011-12-05T09:24:06.757 回答