Почему setIcon не отображает изображение на JButton?

Клянусь, я искал везде и гуглил часами. Я добавил actionListeners ко всем кнопкам, и при нажатии одной из них я хочу придать ей изображение с setIcon( image ) вот так:

public void actionPerformed(ActionEvent e) {
    if(e.getSource() == button) {

    ImageIcon icon = new ImageIcon(getClass().getResource("/Images/" +letter+ ".PNG"));
    button.setIcon(icon );
}

1) Я знаю, что он извлекает изображение, потому что button.getIcon() дает мне что-то вроде file:/Users/path/to/Images/X.PNG. Я проверил, является ли он нулевым до и после того, как я установил значок, и после этого он не является нулевым.

2) Я пробовал другие варианты setIcon, кроме getClass()... и ImageIO.read... и BufferedImage.

3) Я не хочу добавлять больше кода, потому что я даже не уверен, что еще имеет значение. Я надеялся на некоторые из ваших предположений

4) В eclipse я изменил выходную папку на src (вместо bin), и именно там находится моя папка Images.


person Alex Silverman    schedule 08.07.2013    source источник
comment
Перед установкой проверьте, является ли значок объекта нулевым. Если он равен нулю, то путь к значку недействителен.   -  person KernelPanic    schedule 09.07.2013
comment
Это не нуль, и это определенно правильный путь. Разве button.getIcon() ничего не покажет, если это значение null или если это неверный путь?   -  person Alex Silverman    schedule 09.07.2013
comment
На какой платформе вы запускаете свое приложение?   -  person KernelPanic    schedule 09.07.2013
comment
Вы делаете какую-либо проверку/обновление объектов? Я не могу вспомнить точный тот, который вам нужен, но вам нужно переупаковать/проверить объекты качания, чтобы он отображал изменения. Попробуйте перекрасить();   -  person RyanS    schedule 09.07.2013
comment
Мне не нужно было раньше, когда он работал. Но validate() не сработало. А repaint() пока нечего. Я все еще пытаюсь понять, как перепаковать.   -  person Alex Silverman    schedule 09.07.2013
comment
Вам, вероятно, не нужно перепаковывать, я просто помню, как использовал это в какой-то момент при использовании свинга. Попробуй перекрасить кнопку   -  person RyanS    schedule 09.07.2013
comment
перекрасить () не сработало.   -  person Alex Silverman    schedule 09.07.2013
comment
Попробуйте создать подкласс JButton и переопределить paintComponent, а внутри него отобразить значок   -  person KernelPanic    schedule 09.07.2013
comment
Что означает подкласс? Это все? public class SquareButton extends JButton { И как отобразить значок в классе рисования?   -  person Alex Silverman    schedule 09.07.2013
comment
Вот это уже... подкласс.   -  person Alex Silverman    schedule 09.07.2013
comment
Чтобы быстрее получить помощь, опубликуйте SSCCE.   -  person Andrew Thompson    schedule 09.07.2013
comment
@AlexSilverman: надеюсь, вы найдете этот ответ полезным :-)   -  person nIcE cOw    schedule 09.07.2013


Ответы (1)


У меня была такая же проблема, я думаю. Я использовал Eclipse, проверил свой код в JGrasp, и он сработал. Оказывается, Eclipse хочет, чтобы ресурсы находились в папке Project, а не в SRC или BIN.

person ChrisWilson4    schedule 21.01.2014