Я хочу загрузить изображение и использовать его как Back Ground для моего JPanel, этот код не дает мне никаких ошибок или результатов.
Я также попытался использовать BufferedImage и установил местоположение файла на путь изображения, но получил ошибку "Не могу прочитать входной файл!", После некоторого исследования я нашел этот метод и более легкую альтернативу.
import javax.swing.ImageIcon;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;
public class drawArea extends JPanel {
public drawArea(){
init();
}
private void init(){
setPreferredSize( new Dimension( 570, 570 ) );
setVisible(true);
}
private void initializeGrid(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Image img = new ImageIcon("/LinearEquations/src/exit.png").getImage();
g2d.drawImage(img, 0, 0, this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
initializeGrid(g);
}
}
Заранее спасибо
Никогда не читайте изображение в методе paint или paintComponent. Поймите, что этот метод в значительной степени определяет воспринимаемую отзывчивость вашей программы, и если вы замедляете ее путем ненужного повторного чтения изображений, ваши пользователи не будут счастливы.
Вероятно, ваша проблема связана с неправильным относительным путем. Я рекомендую вам попробовать прочитать ваше изображение в методе init()
и сохранить его как переменную. Не читайте его как файл, как вы делаете, а скорее как InputStream, полученный из ресурса класса.
например,
public class DrawArea extends JPanel {
// we've no idea if this is the correct path just yet.
private static final String IMG_PATH = "/exit.png";
public DrawArea() { // better have it throw the proper exceptions!
setPreferredSize( new Dimension( 570, 570 ) ); // not sure about this either
// setVisible(true); // no need for this
img = ImageIO.read(getClass().getResourceAsStream(IMG_PATH));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null) {
g.drawImage(img, 0, 0, this);
}
}