Загрузка изображения в Java с помощью BufferedImage - учебник Oracle - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок в Java и мне хотелось бы загрузить изображение с помощью этого скрипта:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

/**
 * This class demonstrates how to load an Image from an external file
 */
public class LoadImageApp extends Component {

BufferedImage img;

public void paint(Graphics g) {
    g.drawImage(img, 0, 0, null);
}

public LoadImageApp() {
   try {
       img = ImageIO.read(getClass().getResource("/resources/java.png"));//cannot found image
   } catch (IOException e) {
   }

}

public Dimension getPreferredSize() {
    if (img == null) {
         return new Dimension(100,100);
    } else {
       return new Dimension(img.getWidth(null), img.getHeight(null));
   }
}

public static void main(String[] args) {

    JFrame f = new JFrame("Load Image Sample");

    f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

    f.add(new LoadImageApp());
    f.pack();
    f.setVisible(true);
}
}

Затем я помещаю картинку в папку ресурса "resources", меняю название местаизображения, например "/resources/java.png", и когда я компилирую, появляется пустое окно без изображения.

Вы можете увидеть ошибку здесь: https://ibb.co/ysjNyQw

1 Ответ

0 голосов
/ 03 февраля 2019

Первое, что вы захотите сделать, - это провести исследование «встроенных ресурсов», например,

Я не использую Eclipse, я использую Netbeans, нопроцесс должен быть таким же

Project

Как вы можете видеть, я поместил свое изображение в пакет resources внутри "источников" проектов,Это обеспечит его доступность во время выполнения с помощью механизма поиска пути к классам (и встроенного в полученный Jar-файл при его экспорте).

Затем я использовал JLabel для его отображения ...

Example image

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }

                    BufferedImage image = ImageIO.read(getClass().getResource("/resources/java.png"));
                    JLabel label = new JLabel(new ImageIcon(image));

                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(label);
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                } catch (IOException ex) {
                    Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }
}

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

, чтобы лучше понять, как рисование работает в Swing и как вам следуетработать с этим

...