Возможно ли получить верхнюю карту в Java CardLayout?
Я пробовал циклически проходить по каждому компоненту для проверки видимости с помощью isVisible (), но кажется, что все они «видимы».
Редактировать: Под «верхней картой» я подразумеваю ту, которая в данный момент находится на «верхней» карте, а не первую или последнюю карты. Кроме того, я не знаю, помогает ли это, но я ищу JPanel (или его подкласс)
Редактировать: Фрагмент кода
for (Component component : getComponents()) {
if (component instanceof JPanel && component.isVisible()) {
currentPanel = (JPanel) component;
System.out.println(currentPanel.getClass().getName());
}
}
Приведенный выше код всегда выводит имя каждого класса компонента, независимо от того, являются ли они видимой картой или нет.
Редактировать : Я использую это как часть школьного задания. Я не пытаюсь получить халяву здесь, назначение не вращается вокруг этого макета. Это просто наиболее удобное расположение для переключения между панелями. Мой учитель указал, что в проекте не должно быть стороннего кода. Я видел реализацию по ссылке camickr прежде, но я не могу использовать ее. Я могу свободно реализовать подобные функции и, возможно, дать ссылку на это в документации, но я не могу просто загрузить и использовать.
Редактировать : Причина, по которой я пытаюсь получить верхнюю карту, заключается в том, что у меня есть панель инструментов с кнопкой «Добавить». Вместо того, чтобы иметь одну кнопку добавления для каждой из двух моих возможных вещей, я хотел, чтобы она знала, что добавить, просто посмотрев, какая панель просматривается в данный момент. Если есть другой, более подходящий способ сделать это, пожалуйста, дайте мне знать.
Редактировать : Спасибо всем за помощь. Я понял, в чем проблема. Я предполагаю, что это была моя вина, так как я не предоставил достаточно деталей. Две мои карты JScrollPane
с, и мне также нужно было просмотреть их содержимое, чтобы выяснить, была ли одна из этих панелей той, которую я видел. Я не проверял isVisible()
на самой панели прокрутки, я смотрел на ее контуры, которые всегда видны, это была панель прокрутки, видимость которой мне нужно было проверить.
public JPanel getCurrentPanel() {
JPanel currentPanel = null;
for (Component component : getComponents()) {
if (component.isVisible()) {
if (component instanceof JPanel)
currentPanel = (JPanel) component;
else if (component instanceof JScrollPane)
currentPanel = (JPanel) ((JScrollPane) component).getViewport().getComponent(0);
}
}
return currentPanel;
}