第一种方法:用JLabel显示图片,此种方法图片是一个UI控件,通过布局管理器可放在面板的任意位置,一般用于较小的图标显示,图片上不能再放置其它控件。
第二种方法:在JPanel面板容器中将图片绘制出来,可通过绘制坐标将图片显示在面板的任意位置,一般用于背景图,图片本身不是UI控件,因此图片上还可以放置其它控件。
例子:
package net.miqiang.gui;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Java面板中显示图片的两种常用方法
* @FileName: TestMain.java
* @Author: 米强 <转载请保留作者与出处>
* @Blog: http://blog.csdn.net/mq612
* @Blog: http://hi.baidu.com/mq612/blog
*/
@SuppressWarnings("serial")
public class TestMain extends JFrame {
public TestMain() {
super("显示图片的两种方法");
// JPanel面板容器,放置或绘制图片用
JPanel pane = null;
// 获取一个Image图片对象,使用final修饰为了第二种方法的匿名类可以使用
final Image image = getToolkit().getImage("C:\\face.jpg");
{
// 将第二种方法的代码块全部注释掉,可看到第一种方法显示的图片
// 第一种方法:用JLabel显示图片,此种方法图片是一个UI控件,通过布局管理器可放在面板的任意位置,一般用于较小的图标显示,图片上不能再放置其它控件。
// 通过图片构造一个标签对象
JLabel label = new JLabel(new ImageIcon(image));
// 构造JPanel面板
pane = new JPanel();
// 将标签添加进面板容器
pane.add(label);
}
/*
{
// 将第一种方法的代码块全部注释掉
// 第二种方法:在JPanel面板容器中将图片绘制出来,可通过绘制坐标将图片显示在面板的任意位置,一般用于背景图,图片本身不是UI控件,因此图片上还可以放置其它控件。
// 构造面板对象,由于要重写其中的paintComponent方法,这里使用匿名类,相当于继承了JPanel对象
pane = new JPanel(){
// 重写面板的绘制方法
@Override
protected void paintComponent(Graphics g) {
// 调用父类的paintComponent方法
super.paintComponent(g);
// 使用Graphics绘制图片
g.drawImage(image, 0, 0, this);
}
};
// 随便添加一个按钮控件,该按钮可以显示在图片上方,第一种方法则无法办到。
pane.add(new JButton("按钮可以出现在图片上"));
}
*/
// 将面板添加进窗体的ContentPane中
getContentPane().add(pane);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 400);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new TestMain();
}
}