Не могу загрузить изображение в Java

1

Я хочу загрузить изображение и использовать его как 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);
}
}

Заранее спасибо

Теги:
swing

1 ответ

3
Лучший ответ

Никогда не читайте изображение в методе 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);
    }
  }
  • 0
    для Относительного пути я щелкнул правой кнопкой мыши изображение и скопировал путь в свойствах. Я использую Затмение.
  • 1
    @AhmedSaad: это не главное. При использовании ресурсов относительный путь относительно путей классов. Пожалуйста, смотрите изменения, чтобы ответить на возможный пример.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню