在JFrame中设置背景图像

是否有任何方法可以将图像设置为JFrame背景?

没有内置的方法,但有几种方法可以做到这一点。 我现在能想到的最直接的方式是:

  1. 创建JComponent的子类。
  2. 重写paintComponent(Graphics g)方法来绘制要显示的图像。
  3. JFrame 的内容窗格设置为此子类。

一些示例代码:

 class ImagePanel extends JComponent { private Image image; public ImagePanel(Image image) { this.image = image; } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, this); } } // elsewhere BufferedImage myImage = ImageIO.read(...); JFrame myJFrame = new JFrame("Image pane"); myJFrame.setContentPane(new ImagePanel(myImage)); 

请注意,如果这是您想要的,此代码不处理调整图像的大小以适应JFrame

尝试这个 :

 import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Test { public static void main(String[] args) { JFrame f = new JFrame(); try { f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg"))))); } catch (IOException e) { e.printStackTrace(); } f.pack(); f.setVisible(true); } } 

顺便说一下,这将导致内容窗格不是一个容器。 如果你想添加东西,你必须继承一个JPanel并覆盖paintComponent方法。

您可以使用Background Panel类。 它像上面解释的那样进行自定义绘画,但是可以显示缩放,平铺或正常大小的图像。 它还解释了如何使用带有图像的JLabel作为框架的内容窗格。

 import javax.swing.*; import java.awt.*; import java.awt.event.*; class BackgroundImageJFrame extends JFrame { JButton b1; JLabel l1; public BackgroundImageJFrame() { setSize(400,400); setVisible(true); setLayout(new BorderLayout()); JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful_design.png")); add(background); background.setLayout(new FlowLayout()); l1=new JLabel("Here is a button"); b1=new JButton("I am a button"); background.add(l1); background.add(b1); } public static void main(String args[]) { new BackgroundImageJFrame(); } } 

看看下面的链接

http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html