Первое, что пришло на ум:
В JPanel
нет концепции «фонового изображения», поэтому нужно было бы написать свой собственный способ реализации такой функции.
Один способ. для этого необходимо переопределить метод paintComponent
для рисования фонового изображения при каждом обновлении JPanel
.
Например, можно создать подкласс JPanel
и добавьте поле для хранения фонового изображения и переопределите метод paintComponent
:
public class JPanelWithBackground extends JPanel {
private Image backgroundImage;
// Some code to initialize the background image.
// Here, we use the constructor to load the image. This
// can vary depending on the use case of the panel.
public JPanelWithBackground(String fileName) throws IOException {
backgroundImage = ImageIO.read(new File(fileName));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw the background image.
g.drawImage(backgroundImage, 0, 0, this);
}
}
(Приведенный выше код не был протестирован.)
Следующий код можно использовать для добавления JPanelWithBackground
в JFrame
:
JFrame f = new JFrame();
f.getContentPane().add(new JPanelWithBackground("sample.jpeg"));
В этом примере метод ImageIO.read (File)
использовался для чтения внешнего файла JPEG.
Вы можете создать подкласс компонента
http://www.jguru.com/faq/view.jsp?EID=9691
Или возиться с оболочками
http://www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-image.html
Вот еще один быстрый подход без использования дополнительной панели.
JFrame f = new JFrame("stackoverflow") {
private Image backgroundImage = ImageIO.read(new File("background.jpg"));
public void paint( Graphics g ) {
super.paint(g);
g.drawImage(backgroundImage, 0, 0, null);
}
};
Запись Панель фона показывает несколько различных способов в зависимости от ваших требований.