Отображение предыдущей вкладки CardLayout - PullRequest
3 голосов
/ 14 ноября 2010

У меня проблемы с выяснением этого.

Ситуацию не сложно представить, поэтому я надеюсь, что смогу опубликовать это без примера кода. У меня есть JPanel с CardLayout. Панель содержит несколько других панелей в виде отдельных вкладок. Я пытаюсь создать JButton, в котором на главной панели будет отображаться последняя открытая вкладка (та, что была показана до текущей). Ничего страшного, я сначала подумал.

Итак, я начал с того, что подумал, как получить текущую видимую вкладку (панель), и обнаружил, что в Panel нет собственного метода для этого, а точнее CardLayout, который содержит только методы first (), last (), next () и previous () которые мне не нужны.

Тогда я подумал, что, возможно, чтобы достичь своей цели, я мог бы пройтись по всем компонентам главной панели и проверить, какой из них видим, какой будет текущим. Я нахожу это немного сложным, хорошо, но как мне заставить эту панель показывать CardLayout, если у меня нет имени карты, чтобы вызвать метод CardLayout show (parent, name)?

На данный момент я понятия не имею. Я искал в Интернете, но не нашел решения, только то, что мало кто пытался придумать что-то подобное. Поэтому я надеюсь, что кто-то, кто уже разбирается в этом вопросе, сталкивается с этой темой: -)

Спасибо за любые предложения.

С наилучшими пожеланиями

Мартин С.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Это поднимает вопрос о том, как вы попали на текущую карту в первую очередь. Если вы использовали next() для перехода к текущей карте, то previous() приведет вас к предыдущей карте и наоборот. Если вы используете first() или last(), то вам не повезло.

Конечно, вы всегда можете продублировать некоторую информацию, хранящуюся в CardLayout, для достижения своей цели: если вы поддерживаете массив имен компонентов (и обновляете его при каждом вызове addLayoutComponent), а также предыдущий индекс (и обновите его с помощью next, previous и других вызовов), затем вы можете просто найти имя предыдущего компонента и использовать show, чтобы показать предыдущую карту.


Обновление: Поскольку вы знаете имена вкладок, вот как можно сохранить предыдущее имя вкладки:

String prevTab, curTab;

public void showTab(String newTab) {
  prevTab = curTab;
  curTab = newTab;
  layout.show(parent, curTab);
}

public void goBack() {
  layout.show(parent, prevTab);
}
0 голосов
/ 14 ноября 2010

Вы можете создать карту объекта Карта. И добавить панели и имена в макет карты и на карту. Впоследствии, если у вас есть ранее показанный JPanel, вы получите его имя с карты через map.get (JPanel p). И чтобы узнать, что JPanel было видно до этого момента, вам нужно добавить ComponentListener для каждого JPanel. И сделайте так, чтобы изменить некоторую статическую переменную для события componentHidden (например, статический JPanel prev_shown).

...