2013-02-18 2 views
1

EDIT: Это проект Netbeans. Итак, я создал подкласс JButton под названием Card. Я пытаюсь установить значок кнопки при создании.Пользовательский JButton подкласс setIcon метод не работает

package matchinggame; 

public class Card extends JButton { 

    final static ImageIcon defaultIcon = new ImageIcon("cardback.jpg"); 

    ... 

    public Card(int secretIconIndex) { 
     //Set the button's icon to the default icon 
     setIcon(defaultIcon); 
     ... 
    } 

    ... 

} 

Если вы задавались вопросом, расположение «cardback.jpg» изображения:

C:\Users\Jesse\SkyDrive\Documents\RCS\Grade 12\ICS4U\M9\MatchingGame\src\matchinggame\cardback.jpg 

Он находится в той же папке/пакет, как и все классы, так что я считаю, что могу оставить относительный путь к файлу. Когда я запускаю программу, все кнопки просто пустые (без текста или значка). Является ли это проблемой конструктора или файловой переменной?

+2

Вы пробовали использовать абсолютные пути? –

+0

Да, неправильные пути - это то место, где я бы посмотрел. Использовали ли вы отладчик или инструкции println или регистратор, чтобы проверить состояние программы на данный момент, чтобы увидеть, является ли значок нулевым, например? –

+0

Никогда не использовались абсолютные пути раньше, но я просто пробовал абсолютный путь, и изображение появляется сейчас! Но теперь это не будет работать на чужом компьютере ... Есть ли какое-нибудь обходное решение для этого? – jessechk

ответ

1

На мой вопрос был дан ответ в вопросе комментариев. brano88 и Hovercraft Full of Eels сказали использовать ресурсы вместо путей к файлам. Следующая исправленная моя проблема:

final ImageIcon defaultIcon = new ImageIcon(getClass().getResource("/resources/cardback.jpg")); 

Я положил это в свой класс карты.

Примечание: Я переместил свои изображения в новый пакет «resources» внутри папки «src» в папке Eclipse или «Source Packages» в Netbeans.

0

Если вы используете «затмение», изображение должно находиться внутри папки «src», чтобы использовать абсолютный путь. Использование:
new File("cardback.jpg").exists() // to see if the file is in the right place

4

Если это магазин проект Eclipse, образ в resources/ папку в папке src/.

setButtonIcon("cardback.jpg"); 

public void setButtonIcon(String filename) { 
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    InputStream input = classLoader.getResourceAsStream("/"+filename); 
    ImageIcon icon = new ImageIcon(ImageIO.read(input)); 
    super.setIcon(icon); 
} 
+2

Мне нравится использование 'ImageIO', но вы можете просто использовать' ImageIO.read (getClass(). GetResource ("/ matchinggame/cardback.jpg"); 'и получить тот же результат;) – MadProgrammer

Смежные вопросы