CardLayout — Как использовать предыдущий() и следующий() с помощью NetBeans GUI Builder?

Вот что я пробовал:

Перетащил несколько панелей JPanel на JFrame (используя окно инспектора NetBeans).

В конструкторе JFrame сделал невидимыми все панели JPanel с помощью .setVisible(false), кроме той, которую я хочу показать первой.

Это работает, и я могу легко переходить от одного к другому, используя некоторые кнопки с actionPerformed и добавляя .setVisible(false) к текущей карточке и .setVisible(true) к той, которую я хочу видеть.

Что я хотел сделать сейчас, так это использовать CardLayout previous() и next(), аналогично браузеру назад/вперед. Я также хотел бы получить доступ к панели из разных мест, то есть две панели могут ссылаться на одну и ту же, поэтому предыдущая панель не всегда будет одинаковой.

Я попытался использовать следующий код в actionPerformed внутри класса JFrame:

CardLayout cardLayout = (CardLayout) this.getLayout();
cardLayout.previous(this);

Однако это не работает. Что мне не хватает? Это должно делать то, что я ищу?


person vitorsdcs    schedule 14.11.2012    source источник
comment
См. также этот полный пример.   -  person trashgod    schedule 14.11.2012


Ответы (2)


Объявите переменную String previousCard в вашей JPanel. Когда вы переходите от CardA к CardB, установите для переменной previousCard значение «CardA» или любое другое имя карты. Таким образом, после установки этого параметра для всех переходов с одной карты на другую кнопки возврата всегда будут выполнять одно и то же действие.

cardLayouot.show(getContentPane(), previousCard);
person Salih Erikci    schedule 10.12.2013

Поскольку вы установили макет вашего JFrame на CardLayout, вам нужно будет использовать родительский контейнер при использовании его методов next() и previous(). Для JFrame родительским контейнером является панель содержимого. Итак, измените:

cardLayout.previous(this);

to

cardLayout.previous(getContentPane());
person Reimeus    schedule 14.11.2012