Можно ли получить верхнюю карту в 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;
}