Я хочу добавить фоновое изображение в свой кадр. Но когда я добавляю изображение в свой кадр, он был добавлен успешно, но другие вещи, такие как j ярлык и кнопки, добавленные в рамки, не отображаются во фрейме. Я сохранил изображение на рабочем столе. ниже мой код
package UI;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Color;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.Insets;
public class EditTeamInterface extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
EditTeamInterface frame = new EditTeamInterface();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
//frame.getContentPane().setBackground(Color.white);
frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("C:/Users/Abdullah/Desktop/cricketBackGround1.jpg")))));
frame.pack();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public EditTeamInterface() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 624, 356);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0};
gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
JLabel lblNewLabel = new JLabel("EDIT OPTIONS");
lblNewLabel.setFont(new Font("SketchFlow Print", Font.BOLD, 18));
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel.gridx = 0;
gbc_lblNewLabel.gridy = 0;
contentPane.add(lblNewLabel, gbc_lblNewLabel);
JButton btnNewButton = new JButton("New button");
GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
gbc_btnNewButton.gridx = 5;
gbc_btnNewButton.gridy = 5;
contentPane.add(btnNewButton, gbc_btnNewButton);
}
}
В конструкторе EditTeamInterface
вы устанавливаете область содержимого для фрейма с помощью setContentPane(contentPane);
, но в static void main
вы заменяете ее
frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("C:/Users/Abdullah/Desktop/cricketBackGround1.jpg")))));
Это отбрасывает все, что вы делали раньше, для этого нового контента...
Вместо EditTeamInterface
простирающегося от JFrame
, измените его так, чтобы он простирался от JPanel
Создайте новый экземпляр JFrame
, установите панель содержимого на свою метку, а затем добавьте EditTeamInterface
в фрейм.
Поскольку по умолчанию у JLabel
нет менеджера компоновки, вы должны вызвать setLayout(new BorderLayout())
в кадре после того, как вы установите его на панель содержимого на ярлык
Хотя, используя JLabel
, этот способ будет работать, JLabel
НЕ будет вычислять предпочтительный размер на основе потребностей его содержимого, а скорее зависит от свойств icon
и text
. Это не делает его подходящим для этой задачи.
Лучшим решением является использование настраиваемого JPanel
и переопределение его paintComponent
для рендеринга изображения, которое вы хотите. Если вы умны, вы сделаете так, чтобы этот класс был повторно использован.
Что-то вроде этого, например