Не так давно я столкнулся с задачей установки изображения в качестве фона для 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);
Статьи по теме: