2013-04-02 4 views
0

им возникли проблемы при добавлении изображения после нажатия кнопки, ив только добавил код с JLabel/ImageIconизображения не появляется после нажатия кнопки

JLabel picture;  
public Check() { 
    picture = new JLabel(createImageIcon("images\\exit.png")); 
    add(picture, BorderLayout.WEST); 
} 

public void actionPerformed(ActionEvent e) { 
    picture.setIcon(createImageIcon("images\\update.png")); 
    } 

protected static ImageIcon createImageIcon(String path) { 
    java.net.URL imgURL = Check.class.getResource(path); 
    System.err.println(imgURL); 
    if (imgURL != null) { 
     return new ImageIcon(imgURL); 
    } else { 
     System.err.println("Couldn't find file: " + path); 
     return null; 

    } 
} 

я всегда получаю нуль на пути, то, что может быть проблемой

путь изображения является правильным, когда я тестировал другой путь,

public Check() { 
String imgStr = "images\\exit.png"; 
    ImageIcon image = new ImageIcon(imgStr); 
    JLabel label1 = new JLabel(image, JLabel.CENTER); 
    JPanel South = new JPanel(); 
    South.add(label1); 
    add("South", South); 
} 

появляется изображение, но это делается, когда я запускаю его, изображение там уже и не тогда, когда я нажимаю кнопка.

благодаря

+0

И не мог бы вы поставить второй блок кода внутри прослушивателя событий JButton? – christopher

+0

@ChrisCooney id нужно поймать, если нет файла, поэтому 'if else' statment, – user2158735

ответ

0

Пожалуйста, попробуйте picture.setIcon(createImageIcon("/images/update.png"));, так как он выглядит, что вы изображение загружается из пути к классам.

Смотрите здесь:

находит ресурс с заданным именем. Этот метод возвращает null, если нет ресурс с этим именем. Правила поиска ресурсов , связанные с данным классом, реализуются с помощью класса * define class загрузчика класса.

Этот метод делегирует вызов его загрузчику классов после внесения этих изменений в имя ресурса: если имя ресурса начинается с «/», оно не изменяется; в противном случае имя пакета добавляется к ресурсу имя после преобразования «.». на "/". Если этот объект был загружен загрузчиком начальной загрузки , вызов делегируется ClassLoader.getSystemResource.

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#getResource%28java.lang.String%29

+1

извините за длинный ответ," /images/update.png "все еще не работает – user2158735

+0

У вас есть файл в вашем банке и/ваш источник папка? – ollo

+0

Мне нужно будет работать, когда я скомпилирую его в .jar, файлы находятся не в папке src – user2158735

0

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

picture = new JLabel(new ImageIcon("/images/update.png")); 
+0

Мне нужно иметь 'if', как будто нет изображений, которые мне нужны, чтобы показать, что нет изображений, но в этом примере есть update.png – user2158735

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