Может кто-нибудь помочь мне понять, как ImageIcon работает для Java? - PullRequest
0 голосов
/ 21 сентября 2019

Итак, у меня есть около года 5/12 месяцев опыта игры с java, но я никогда не был в состоянии сделать что-либо вне скелетов.Я был бы очень признателен, если бы кто-нибудь помог мне понять, как я могу сделать изображение с моего компьютера видимым, используя качели.

Я ходил между разными сайтами, пытаясь найти ответы, но ни один из примеров кода, который я пробовал, не сработал.В прошлом Stackoverflow помогал изучать Java с помощью различных вопросов, которые задавали другие люди, поэтому я создал аккаунт, чтобы задать вопрос самостоятельно.Я, наверное, очень тупой, но мой образ никогда не появляется, несмотря на то, что я пробовал.Я возвращаюсь к попытке понять свинг каждые несколько месяцев после того, как отказался от него ранее, и хотя я чувствую, что у меня есть представление о некоторых основных понятиях, таких как что-то должно быть установлено как видимое, как создать / добавить JFrame и т. Д., Это всегдаэто меня расстраивает.

import javax.swing.*;
import java.awt.*;

public class Main extends JFrame {

public static void main(String[] args) {
        JFrame frame = new JFrame("main");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        ImageIcon ii = new ImageIcon("C:\\Users\\plasm\\IdeaProjects\\Shdo\\src\\mario.jpg");
        JLabel lable = new JLabel(ii);
        JScrollPane jsp = new JScrollPane(lable);
        frame.getContentPane().add(jsp);
        frame. setSize(1000, 700);
        JButton button = new JButton();
        button.setSize(new Dimension(300, 300));
        button.setLocation(500, 350);
        frame.getContentPane().add(button);

        frame.setVisible(true);

    }
}

Приведенный выше код вставлен в копию из https://www.daniweb.com/programming/software-development/threads/379864/add-image-and-button-to-jframe, кроме пути, однако он показывает только базовый белый JFrame при заданных размерах.

1 Ответ

1 голос
/ 21 сентября 2019
frame.getContentPane().add(jsp); // problem
frame. setSize(1000, 700);
JButton button = new JButton();
button.setSize(new Dimension(300, 300)); // does nothing
button.setLocation(500, 350); // does nothing
frame.getContentPane().add(button); //problem

Проблема в том, что менеджером макета по умолчанию для панели содержимого JFrame является BorderLayout.Вы пытаетесь добавить два компонента в ЦЕНТР BorderLayout, которые не будут работать.Кнопка заменяет панель прокрутки.

Вместо этого вы должны использовать:

frame.getContentPane().add(jsp, BorderLayout.CENTER);
frame. setSize(1000, 700);
JButton button = new JButton("Testing");
frame.getContentPane().add(button, BorderLayout.PAGE_END);

Прочтите раздел из учебника по Swing в Диспетчер макетов для получения дополнительной информации и рабочего примера.BorderLayout.

Как уже упоминалось в первом комментарии.Нет необходимости в getContentPane().Фрейм автоматически добавит компонент на панель содержимого.

Кроме того, при выполнении тестирования лучше сделать что-то вроде:

JLabel label = new JLabel("Icon label");
label.setIcon(ii);

Таким образом, если вы укажете неправильный путь дляизображение, вы по крайней мере увидите текст метки и узнаете, что проблема в пути, а не в коде макета.

...