Icon是一个Interface,里面包含3种空的抽象文法,分别是getIconHeight()、getIconWidth()与paintIcon();若你想使用Icon类 来制作Icon,你必须实现(implements)这3个方法,我们直接来看下面这个例子,你就能清楚如何实现Icon界面建立Icon组件了。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class IconDemo implements Icon { private int height=50; private int width=70; public int getIconHeight() { return height; } public int getIconWidth() { return width; } public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(Color.red); g.drawRect(x, y, width, height); g.fillRect(x, y, width, height); } public static void main(String[] args) { JFrame f = new JFrame("IconDemo"); //不能放在这里 f.setSize(500,500); Container contentPane = f.getContentPane(); Icon icon = new IconDemo();//注意这里为什么Icon icon可以,当然IconDemo icon是可以了, JLabel label = new JLabel(icon, JLabel.CENTER); contentPane.add(label); f.pack(); f.setSize(500,500); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
运行的结果是在一个窗口上画一个红框。
虽然它有实现了一个Icon的接口,在 paintIcon里写了绘图的代码。但程序是什么时候调用它的呢?
往下会发现这个 Icon 是加在一个 JLabel 中显示的。而 JLabel 的参数就是一个 Icon 接口。只是平时我们用 ImageIcon 来实际显示图片,而 ImageIcon也是实现了Icon接口,问题就很清楚了。显示图片时实际也是调用了 Icon接口的 paintIcon方法。绘制图片时就调用paintIcon()函数。
给按钮添加背景图片
public void setIcon(String file, JButton iconButton) { ImageIcon icon = new ImageIcon(file); Image temp=icon.getImage().getScaledInstance(iconButton.getWidth(), iconButton.getHeight(), icon.getImage().SCALE_DEFAULT); icon = new ImageIcon(temp); iconButton.setIcon(icon); }