Ответ 1
Учитывая, что структура каталогов для проекта выглядит так:
Since Images are Application Resources,
it always best to access them in the
form of a URL, instead of File, as you are doing.
Uncomment this below line and watch this answer
of mine, as to HOW TO ADD IMAGES TO THE PROJECT
/questions/10109/loading-image-resource/68101#68101
In order to access images with getClass().getResource(path)
here your Directory structure has to be like this
Project
|
------------------------
| |
bin src
| |
--------- .java files
| |
package images(folder)
( or |
.class 404error.jpg
files, if
no package
exists.)
PaintingExample
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class PaintingExample {
private ImagePanel imagePanel;
private void displayGUI() {
JFrame frame = new JFrame("Swing Worker Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
imagePanel = new ImagePanel();
contentPane.add(imagePanel);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new PaintingExample().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
class ImagePanel extends JPanel {
private ImageIcon imageIcon;
public ImagePanel() {
try {
imageIcon = new ImageIcon(ImageIO.read(ImagePanel.class.getResource(
"/images/aeroplaneright.jpeg")));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return (imageIcon == null ? new Dimension(100, 100): new Dimension(
imageIcon.getIconWidth(), imageIcon.getIconHeight()));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageIcon.getImage(), 0, 0, this);
}
}
ВЫВОД:
В ответ на редактирование
Как упоминалось в редакции, вы используете некоторые Integrated Development Environment - IDE
для создания приложения. Поскольку каждый IDE
используется для работы по-другому. Посмотрите, если этот пост, касающийся добавления изображений в Java Project, поможет вам в этом направлении.
EDIT для NetBeans
- Создать проект Java
- Укажите любое Название проекта. В моем случае я использую SwingTest, так как показано на фотографии
- Предоставить Имя пакета. В моем случае я использую swingtest, так как показано на фотографии
- Щелкните правой кнопкой мыши Исходные пакеты. Новый → Пакет Java. Под Новый пакет Java, укажите Имя пакета, в моем случае я использую изображения
- Скопируйте изображение из Файловой системы и вернитесь к NetBeans. Щелкните правой кнопкой мыши созданный таким образом образ пакет и вставьте его (внутри среды IDE NetBeans).
- Создайте два класса, щелкнув правой кнопкой мыши swingtest, Новый → Класс Java, содержимое которого показано ниже
Вот и все, теперь все готово. Запустите проект, и вы сможете видеть изображения. Наблюдайте за использованием getClass().getResource(...)
thingy:
imageIcon = new ImageIcon(ImageIO.read(ImagePanel.class.getResource(
"/images/loyalperson.jpg")));
SwingTest
package swingtest;
import java.awt.*;
import javax.swing.*;
public class SwingTest {
private ImagePanel imagePanel;
private void displayGUI() {
JFrame frame = new JFrame("Swing Worker Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
imagePanel = new ImagePanel();
contentPane.add(imagePanel);
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
@Override
public void run() {
new SwingTest().displayGUI();
}
};
EventQueue.invokeLater(runnable);
}
}
ImagePanel
package swingtest;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private ImageIcon imageIcon;
public ImagePanel() {
try {
imageIcon = new ImageIcon(ImageIO.read(
ImagePanel.class.getResource("/images/loyalperson.jpg")));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
@Override
public Dimension getPreferredSize() {
return (imageIcon == null ? new Dimension(100, 100): new Dimension(
imageIcon.getIconWidth(),imageIcon.getIconHeight()));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageIcon.getImage(), 0, 0, this);
}
}
Шаги с изображениями
Вот ссылка на loyalperson.jpg
ИЗМЕНИТЬ 2:
Для добавления настраиваемого компонента выполните следующее:
- Перейдите в Инструменты → Палитра → Компоненты Swing/AWT
- Нажмите Новый Categroy. в окне Новая палитра, укажите Новое название категории
- Нажмите ОК и закройте окно Диспетчер палитр
- Откройте ImagePanel в редакторе, теперь выберите Исходный просмотр, теперь выберите Инструменты → Добавить в палитру и выберите Категория. созданный вами.
- То, что я думаю, будет делать. Теперь компонент можно увидеть на Палитра в разделе Категория, выбранном ранее, который можно перетащить/переместить в JFrame/JComponent.