一、首先重写一个LPanel的子类,里面包含一个用于测试的main方法: package swinghack; import javax.swing.*; import java.awt.*; /** * * @author 雁过留声 */ public class ImagePanel extends JPanel{ private Image img; //一个JPanel的定制子类 public ImagePanel(Image img) { this.img = img; Dimension size = new Dimension(img.getWidth(null),img.getHeight(null)); setSize(size); //确保面板大小与图像一致 setPreferredSize(size); setMinimumSize(size); setMaximumSize(size); setLayout(null); } //重写绘制图像方法 public void paintComponent(Graphics g) { g.drawImage(img, 0, 0, null); } //测试 public static void main(String[] args) { ImagePanel panel = new ImagePanel(new ImageIcon("images/background.png").getImage()); ImageLabel label = new ImageLabel(new ImageIcon("images/boba.png")); label.setLocation(200, 37); panel.add(label); final ImageButton button = new ImageButton(new ImageIcon("images/button.png")); button.setLocation(240, 380); panel.add(button); //为按钮添加按下、选中、失效等状态的效果 button.setPressedIcon(new ImageIcon("images/button-down.png")); button.setSelectedIcon(new ImageIcon("images/button-sele.png")); JFrame frame = new JFrame("Hack 1:Creat ImagePanel"); frame.getContentPane().add(panel); frame.pack(); frame.setVisible(true); } } 二、一个图像标签类 package swinghack; import javax.swing.*; /** * * @author 雁过留声 */ //一个定制的图像标签类 public class ImageLabel extends JLabel { // public ImageButon(String img) // { // this(new ImageIcon(img)); // } public ImageLabel(ImageIcon icon) { //设置标签尺寸以匹配图像大小 setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null)); //设置图标,把绘图工作交给了JLabel setIcon(icon); //将图标文本间隙设为0,边框和文字为null,这样可消除图像周围多余的空间 setIconTextGap(0); setBorder(null); setText(null); //告诉标签不要绘制自己的背景。如果图像含有透明部分,这使得背景图案可以透过透明部分。 setOpaque(false); } } 三、一个含图像的按钮 package swinghack; import java.awt.*; import javax.swing.*; /** * * @author 雁过留声 */ //创建基于图像的按钮 public class ImageButton extends JButton { public ImageButton(ImageIcon icon) { setSize(icon.getImage().getWidth(null),icon.getImage().getHeight(null)); setIcon(icon); setMargin(new Insets(0,0,0,0)); setIconTextGap(0); setBorderPainted(false); setBorder(null); setText(null); } } 四、运行结果: 点击按钮后,图标会变成这样子: