Java--Swing设置窗体图片背景
一、方法介绍
(一)
自定义一个ImagePanel,重写paintComponent方法,然后应用窗体中设置为contentPane即可。
(1) ImagePanel.java
import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class ImagePanel extends JPanel { // 图片宽度 private int width; // 图片高度 private int height; // 图片 private BufferedImage image = null; public ImagePanel(int width, int height, String path) { super(); // 设置宽高 this.width = width; this.height = height; try { // 读取图片 image = ImageIO.read(new File(path)); } catch (IOException e) { e.printStackTrace(); } } @Override protected void paintComponent(Graphics g) { g.drawImage(image,0,0,width,height,this); } }
(2) TestFrame.java
import javax.swing.*; import java.awt.*; public class TestFrame extends JFrame { private static final String IMAGE_PATH = "./images/background.png"; private ImagePanel imagePanel; public TestFrame() { // 设置窗体位置和大小 setBounds(500,300,500,500); // 窗体关闭方式 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 以下为重点代码 // 图片面板 imagePanel = new ImagePanel(500,500,IMAGE_PATH); setContentPane(imagePanel); // 布局方式需设置后更改 setLayout(null); // 标签 JLabel label = new JLabel("AFAFASFASFAS"); label.setFont(new Font("微软雅黑",Font.PLAIN,40)); label.setBounds(100,100,300,30); getContentPane().add(label); setVisible(true); } public static void main(String[] args) { new TestFrame(); } }
效果如下:
(二)
利用标签组件JLabel包含图片,然后将标签组件JLabel添加到分层面板最底层,最后将内容面板设为透明即可。
import javax.swing.*; import java.awt.*; public class TestFrame extends JFrame { private static final String IMAGE_PATH = "./images/background.png"; private ImagePanel imagePanel; public TestFrame() { // 设置窗体位置和大小 setBounds(500,300,500,500); // 窗体关闭方式 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 以下为重点代码 setLayout(null); ImageIcon imageIcon = new ImageIcon(IMAGE_PATH); JLabel image_label = new JLabel(imageIcon); image_label.setBounds(0, 0, 500,500); // 添加到分层面板最底层 this.getLayeredPane().add(image_label, new Integer(Integer.MIN_VALUE)); // 内容面板设为透明 ((JPanel) getContentPane()).setOpaque(false); // 标签 JLabel label = new JLabel("AFAFASFASFAS"); label.setFont(new Font("微软雅黑",Font.PLAIN,40)); label.setBounds(100,200,300,30); getContentPane().add(label); setVisible(true); } public static void main(String[] args) { new TestFrame(); } }
效果如下:
二、方法比较
- 第一种方法相对复杂,第二种方法相对简单。
- 第一种方法设置布局方式应在设为内容面板之后有效,第二种方法无限制。
- 第一种方法 的图片显示完整,第二种则是局部显示,相当于放大。
上一篇:
IDEA上Java项目控制台中文乱码