Не так давно я столкнулся с задачей установки изображения в качестве фона для jFrame в Java. Итак, начнем. Суть способа в следующем: у jLabel в Java можно установить фоновое изображение — иконку (icon). При этом jLabel можно будет использовать как фон. Сверху расположим прозрачный jPanel, и уже на панели разместим все остальные компоненты. Давайте сначала я покажу как это сделать через визуальный редактор Netbeans, а потом в конце статьи я выложу исходный код Java:
- В конструкторе форм Netbeans щелкаем по jFrame правой кнопкой мыши и в контекстном меню выбираем пункт «Установить расположение» -> «Макет контейнера сетки» (GridBagLayout)

- Добавьте панель (jPanel) в jFrame
- В окне «Свойства» jPanel уберите галочку со свойства «opaque»

- Добавьте на jFrame (не на jPanel) компонент jLabel (метка)
- В свойствах только что добавленного jLabel найдите свойство icon и возле него нажмите на кнопку … и выберите интересующее вас изображение:

- В свойствах jLabel найдите свойство «text» и удалите оттуда весь текст
- В свойствах jLabel найдите «X в сетке» (Grid X), «Y в сетке» (Grid Y), Ширина шага сетки, Высота шага сетки (Weight X и Weight Y) и установите значение 1 у всех этих свойств, а свойству «заполнение» (Fill) установите значение «Оба» (Both):

- Повторите шаг 7 для добавленной ранее jPanel
Все, фон готов, теперь можно перетаскивать элементы на фрейм с фоном. А теперь, как я и обещал, исходный код для создания фона для jFrame вручную, без конструктора:
JFrame frame = new JFrame();
java.awt.GridBagConstraints gridBagConstraints;
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new java.awt.GridBagLayout());
jPanel1.setOpaque(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
JButton button1 = new JButton();
button1.setText("Test btn");
button1.setBounds(5, 5, 150, 30);
jPanel1.add(button1);
frame.getContentPane().add(jPanel1, gridBagConstraints);
jLabel1.setIcon(new javax.swing.ImageIcon("/table.jpg")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
frame.getContentPane().add(jLabel1, gridBagConstraints);
frame.pack();
frame.setVisible(true);
Статьи по теме: