Вопрос

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

Ситуацию не сложно представить, поэтому я надеюсь, что я мог бы опубликовать это без примеров кода. У меня есть 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top