добавление пользовательских панелей в апплет с помощью CardLayout - PullRequest
1 голос
/ 05 декабря 2011

Я не могу понять JavaDocs для CardLayout. У меня есть апплет, и из этого апплета у меня есть 5 классов, которые я создал, которые расширяют JPanel. Внутри этих классов все, что было сделано до сих пор, - это дизайн (некоторые компоненты GUI). Теперь я хочу связать все эти классы вместе через Апплет, чтобы одна панель просматривалась за раз (CardLayout). Таким образом, у меня будет возможность из моего Апплета использовать следующий метод 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

Кто-то, пожалуйста, укажите на мою ошибку! Также я предоставил некоторые комментарии к вопросам в коде. Как всегда, спасибо!

Ответы [ 2 ]

2 голосов
/ 05 декабря 2011

Вы не использовали никаких ограничений для идентификации каждой карты при добавлении панелей к макету карты. Затем вы можете перейти непосредственно к конкретной карте.

См. Как использовать макет карты для рабочего примера.

0 голосов
/ 05 декабря 2011

Чтобы было еще яснее, некоторые фрагменты буквально скопированы по ссылке, предоставленной @ camickr

Создание панели

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

, где BUTTONPANEL и TEXTPANEL - строки,Переключение между различными панелями осуществляется путем вызова

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

, где evt.getItem() будет равно BUTTONPANEL или TEXTPANEL

...