Я думаю, что основная проблема в вашей программе состоит в том, что вы пытаетесь установить абсолютное позиционирование компонентов (например, JLabel
), используя setLayout(null)
и setBounds()
на компонентах.
В Swing правильный способ размещения компонентов - использование менеджеров компоновки. Посмотрите этот урок для деталей о том, как использовать менеджеры по расположению:
https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html
В качестве примера программы я успешно установил изображения (как значок JFrame
, так и внутри области содержимого JFrame
) в следующей программе. Попробуйте и посмотрите.
Это скриншот моего образца JFrame
.
import javax.swing.*;
public class FrameWithIcon
{
public static void main(String[] args)
{
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Since I'm not setting a layout manager to contentPane, it's default (BorderLayout) is used
//This sets the image in JFrame's content area
f.getContentPane().add(new JLabel(new ImageIcon("star.png")));
//This sets JFrame's icon (shown in top left corner of JFrame)
f.setIconImage(new ImageIcon("star.png").getImage());
f.setBounds(300, 200, 400, 300);
f.setVisible(true);
}
}