#java #swing #jframe #jlabel #imageicon
#Ява #качать #jframe #jlabel #изображение
Вопрос:
Я использую VS-код, и моя папка содержит только один файл Java и одно изображение.
Я пытался установить изображение в JLabel, поэтому сначала я получаю доступ к изображению с помощью:
ImageIcon img = new ImageIcon(getClass().getResource("img_flag.png"));
Затем я установил это JLabel
значение, но на моем экране ничего не появляется.
JLabel label = new JLabel(img);
Чтобы подтвердить, что я получаю доступ к правильному изображению, я установил его на логотип окна, и логотип отображался правильно.
setIconImage(img.getImage());
Я не могу понять, почему этикетка не может отображать изображение.
Вот мой полный код:
import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Mylable extends JFrame{ Mylable(){ setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500,500); ImageIcon img = new ImageIcon(getClass().getResource("img_flag.png")); setIconImage(img.getImage()); //working JLabel label = new JLabel(img); //not working add(label); } public static void main(String[] args) { new Mylable(); } }
Комментарии:
1. Компоненты необходимо добавить в рамку ДО того, как она станет видимой.
2. Возьмите
setVisible(true);
и переместите его в конец конструктора, ИЛИ вам нужно вызватьrevalidate
иrepaint
в контейнере, который вы изменили, чтобы запустить новый макет и передать рисунок3. Спасибо, это сработало. Означает ли это, что я не могу вносить изменения в окно, как только я сделаю его видимым?
4. «это означает, что я не могу вносить изменения в окно, как только я сделаю его видимым» Нет, графический интерфейс может быть обновлен новыми компонентами несколькими способами, но вы хотите быть уверены, что на самом деле необходимо добавлять компоненты динамически, так как это требует специальной обработки. Учитывая
JLabel
, что без BG цвет, граница, значок или текст невидимы, в этом нет необходимости. Просто добавьте метку при создании графического интерфейса, а затем устанавливайте значок всякий раз, когда это необходимо.5. Означает ли это, что я не могу вносить изменения в окно, как только я сделаю его видимым? как прокомментировал MadProgrammer: вам нужно вызвать повторную проверку и перекрасить контейнер, который вы изменили, чтобы запустить новый макет и покраску