2010-11-14 4 views
3

У меня возникли проблемы с этим.Показать предыдущую вкладку CardLayout

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

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

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

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

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

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

Martin S.

ответ

2

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

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


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

String prevTab, curTab; 

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

public void goBack() { 
    layout.show(parent, prevTab); 
} 
+0

Я переключаю между вкладками с помощью метода show (parent, tabName) CardLayout, кажется, что это потребует некоторой импровизации, поскольку API CardLayout не предлагает никакой другой опции :-) yay :-p – Martin

+0

@Martin S .: In в этом случае вы знаете предыдущее 'tabName', не так ли? Просто сохраните это и используйте его, чтобы вернуться. – casablanca

+0

Да, но когда я храню tabName и использую show, то это текущий не предыдущий, не так ли? – Martin

0

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

Смежные вопросы