Отображение изображения на основе выбора GUI после преобразования в формат .jar - PullRequest
1 голос
/ 21 февраля 2020

Я создал GUI программу в Java, и у меня есть класс с оператором метода и переключателя, который будет отображать изображение в новом JFrame в зависимости от нажатой кнопки. Код в целом неуклюжий и не имеет никакой обработки ошибок (я изначально делал это для назначения, и я сам сейчас строю на нем), но я хотел знать, есть ли способ загрузить изображения без жесткого кодирования их местоположение. Прямо сейчас изображения находятся в каталоге root, поэтому NetBeans может получить к нему доступ без жесткого кодирования, но есть ли способ заставить его отображать изображения после того, как я преобразую его в файл .jar без жесткого кодирования местоположения файла, особенно если Я хочу иметь возможность использовать его на разных компьютерах? Я включил метод ниже.

Спасибо!

/* method to display images of 3D shapes using switch cases and a new JFrame
    depending on which shape button is selected */
    public void displayOutput(int x) {
        JFrame f = new JFrame();
        f.setBounds(200, 200, 850, 600);
        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.setLocationRelativeTo(null);

        ImageIcon icon = new ImageIcon("");
        switch(x) {
            case 1:
                icon = new ImageIcon("sphere.png");
                break;
            case 2:
                icon = new ImageIcon("cube.jpg");
                break;
            case 3:
                icon = new ImageIcon("cone.png");
                break;
            case 4:
                icon = new ImageIcon("cylinder.png");
                break;
            case 5:
                icon = new ImageIcon("torus.png");
                break;
        }

        JLabel image = new JLabel(icon);
        f.add(image);
        f.setVisible(true);
    }

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете встроить изображения в файл JAR. Поместите их в исходную папку root (если это проект maven / gradle, расположение будет src/main/resources/images, где папка images будет скопирована в ваш JAR-файл при сборке), затем загрузите их следующим образом:

var resourceURL = Thread.currentThread().getContextClassLoader().getResource("/images/sphere.png");
var imageIcon = new ImageIcon(resourceURL);
...