Изображение не отображается на JPanel - PullRequest
3 голосов
/ 17 июня 2010
 class Deal implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
             dl.setDeck();
             dl.shuffle();
             dl.firstDraw(pl);

             for(Card c:pl.showHand())
             panelplay.add(new JLabel(c.getImageIcon()));

             panelplay.validate();
        }
    }

Это обработчик событий для Jbutton.Метод pl.showHand () возвращает ArrayList определенного пользователем класса «Card».Вставка println () внутри цикла показывает печать, поэтому код выполняется, но на панели Panel не отображаются изображения карты.

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

А как насчет существующих ярлыков на панели? Вы не удаляете их. Я предполагаю, что вы используете FlowLayout, и ярлыки просто добавляются в конец панели, поэтому вы их не видите.

Поэтому одним из решений является использование panel.removeAll () перед добавлением меток обратно на панель. Я тогда использую:

panel.revalidate();
panel.repaint();

Или лучший вариант, как было предложено ранее, - не заменять метки, а просто заменять значки, используя метод setIcon ().

1 голос
/ 17 июня 2010

Делайте, как говорит Гилберт, посмотрите на Swing Tutorial, которая касается Labels .
JLabel имеет следующие методы ... void setIcon (Icon)
Icon getIcon ()

Также посмотрите на SplitPaneDemo Он делает именно то, что вы хотите, вы даже можете запустить его с JNLP, чтобы увидеть .

0 голосов
/ 17 июня 2010

Вы не хотите добавлять JLabel в ActionListener.

Вы хотите использовать уже добавленный метод JLabel setText () в ActionListener.

Вы определяете все компоненты Swingодин раз, когда вы создаете графический интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...