在JFrame中设置背景图像
是否有任何方法可以将图像设置为JFrame
背景?
没有内置的方法,但有几种方法可以做到这一点。 我现在能想到的最直接的方式是:
- 创建
JComponent
的子类。 - 重写
paintComponent(Graphics g)
方法来绘制要显示的图像。 - 将
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