代码改变世界

java 一个Icon接口实现的程序

2012-05-11 15:34  youxin  阅读(2020)  评论(0编辑  收藏  举报

  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);  
    }