Обновление содержимого одной карты (JPanel) на основе ввода с другой карты в CardLayout - PullRequest
1 голос
/ 12 мая 2011

У меня есть набор JPanels, расположенных в CardLayout.Проблема в том, что когда я изменяю вещи в одной JPanel, я хочу, чтобы изменения были отражены в другой JPanel, которая является картой в той же колоде.У меня есть метод refresh (), определенный для каждого из этих объектов JPanel, но я не могу вызвать их, используя синтаксис, используемый для смены карт.(Здесь p - это контейнерная карта для колоды карт)

CardLayout cardLayout=(CardLayout)(p.getMenuCard().getLayout());
cardLayout.show(p.getMenuCard(),"Card name");

Я хочу вызвать метод refresh (), но я не знаю, как это сделать в CardLayout.Пожалуйста помоги.

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

Если мы предположим, что каждая из ваших «карточных» панелей реализует интерфейс, который определяет метод refresh(), то вы можете сделать:

interface Refreshable {
    void refresh();
}

class Card1 extends JPanel implements Refreshable {...}
...

// Changing the selected card panel
cardlayout.show(deckpanel, "card name");
for (component card: deckpanel.getComponents()) {
    ((Refreshable) card).refresh();
}

Это соответствует моему пониманию вашей проблемы.Не стесняйтесь редактировать свой вопрос, чтобы уточнить, если это не решит вашу проблему.

1 голос
/ 12 мая 2011

У меня есть набор JPanels в CardLayout. Проблема в том, что когда я изменить вещи в одном JPanel, я хочу изменения, которые будут отражены в другом JPanel это карта в том же колода. У меня есть метод refresh () определены на каждом из этих JPanel объекты, но я не могу назвать их с помощью синтаксис, который используется для сдвига карты. (Здесь p - контейнерная карта для колоды карт)

Одна вещь (CardLayout и замена JPanels) не имеет ничего общего с другой (состояние одного класса изменяется в зависимости от состояния другого класса). Вам нужно, чтобы класс, который вносит первоначальные изменения, «передавал» эту информацию в другой класс, который должен реагировать на изменения, часто вызывая метод setter из второго класса. Другой вариант - заставить второй класс «извлекать» информацию из первого класса с помощью прослушивателя, возможно, PropertyChangeListener. Но опять же, ни одно из этих решений - или какое-либо другое решение - не имеет никакого отношения к CardLayout или обмену представлениями.

Чтобы получить более конкретный совет для вашей текущей ситуации, рассмотрите возможность создания небольшого скомпилируемого и запускаемого приложения, которое не имеет внешних зависимостей (изображения, база данных и т. Д.) И которое демонстрирует вашу проблему, SSCCE и пост это здесь.

...