Для загрузки изображения вы можете использовать этот метод:
ImageIcon loadImageIcon(String name) {
URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
Где параметр name
имеет следующие ограничения:
- Если имя начинается с
/
, то абсолютное имя ресурса - это часть имени, следующая за /
.
- В противном случае абсолютное имя имеет следующую форму:
modified_package_name/name
,
где modified_package_name
- это имя пакета этого объекта с /
вместо .
.
Подробнее см. описание метода getResource (String name) .
Например, если вы поместите этот метод в файл MyPanel.java
и у вас будет следующая структура пакетов
swing/
| - panel/
| | - MyPanel.java
| - resources/
| - my_image.jpg
чем параметр name
, может быть
либо ../resources/my_image.jpg
, либо /swing/panel/resources/my_image.jpg
,
, но ни swing/panel/resources/my_image.jpg
, ни /resources/my_image.jpg
.
Обновление:
Вот рабочий пример. В конструкторе пользовательского интерфейса NetBeans вы можете сделать аналог.
package swing.panel;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ImagePanel extends JPanel {
private Image img;
public ImagePanel(String img) {
this(new ImageIcon(img).getImage());
}
public ImagePanel(Image img) {
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(img, 0, 0, null);
}
/** Returns an ImageIcon, or null if the path was invalid. */
private static ImageIcon loadImageIcon(String path) {
URL imgURL = ImagePanel.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
ImagePanel panel =
new ImagePanel(loadImageIcon("../resources/image.png").getImage());
JFrame frame = new JFrame();
frame.getContentPane().add(panel);
frame.pack();
frame.setVisible(true);
}
});
}
}