CardLayout получить название выбранной карты - PullRequest
7 голосов
/ 28 июня 2011

Как получить строковый идентификатор выбранной панели в макете карты.

Ответы [ 2 ]

13 голосов
/ 28 июня 2011

CardLayout не знает, какая панель выбрана в данный момент.Вы должны хранить это в памяти при вызове метода show ().

8 голосов
/ 27 июня 2012

CardLayout не позволяет вам сделать это.Однако у вас должна быть возможность доступа к верхней панели CardLayout.

Таким образом, небольшой обходной путь состоит в том, чтобы дать каждой добавленной панели имя, равное строковому идентификатору.Таким образом, вы можете получить верхнюю карту и получить ее имя.Вот как вы это делаете:

final String CARD1 = "Card 1";
final String CARD2 = "Card 2";

JPanel panel = new JPanel(new CardLayout());
JPanel card1 = new JPanel();
card1.setName(CARD1);
JPanel card2 = new JPanel();
card2.setName(CARD2);

panel.add(card1);
panel.add(card2);

//now we want to get the String identifier of the top card:
JPanel card = null;
for (Component comp : panel.getComponents()) {
    if (comp.isVisible() == true) {
        card = (JPanel) comp;
    }
}
System.out.println(card.getName());
...