Показывая предыдущую вкладку CardLayout
-
10-10-2019 - |
Вопрос
У меня проблемы с выяснением этого.
Ситуацию не сложно представить, поэтому я надеюсь, что я мог бы опубликовать это без примеров кода. У меня есть JPanel с CardLayout. Панель содержит несколько других панелей в качестве отдельных вкладок. То, что я пытаюсь достичь, - это создать Jbutton, который сделает главную панель -шоу последней открытой вкладкой (предшествующая току). Ничего страшного я подумал сначала.
Поэтому я начал с того, как подумал, как получить текущую видимую вкладку (панель), и обнаружил, что на панели нет нативного метода на панели или, скорее, карт, который содержит только методы первого (), последнего (), следующего () и предыдущего () которые мне бесполезны.
Затем я подумал, что, возможно, для достижения своей цели я мог бы пройти через все компоненты основной панели и проверить, какая из них видно, что будет текущим. Я нахожу это немного сложным, нормальным, но как мне сделать эту панель, показывающую CardLayout, если у меня нет названия карты, чтобы вызовать метод CardLayout Show (родитель, имя)?
На данный момент я понятия не имею. Я искал Интернет, но не нашел решение, только что немногие люди пытались выяснить что -то подобное. Так что я надеюсь, что кто-то, кто уже раздает с такой проблемой, столкнется с этой темой :-)
Спасибо за любые предложения.
С наилучшими пожеланиями
Мартин С.
Решение
Это поднимает вопрос о том, как вы попали на текущую карту в первую очередь. Если вы использовали 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);
}
Другие советы
Вы можете создать карту карты объекта. И добавьте панели и имена в макет карты и на карту. После этого, если у вас ранее показан JPanel, вы получаете его имя от map через map.get (jpanel p). И чтобы найти то, что JPanel было видно до момента, вам нужно добавить ComponentListener в каждую JPanel. И сделайте это, чтобы изменить какую -то статическую переменную на ComponenthIdden Event (например, Static JPanel Prev_Shown).