给组件添加图标

给组件添加图标

Frame窗口中,button,label这些组件都可以添加图标,图标有两种创造方式,一种是代码绘制,另一种是选用现成的图片。

添加绘制图标

以下代码展示如何给一个label添加绘制图标:

package com.cxf.gui.icon;

import javax.swing.*;
import java.awt.*;

public class TestForIcon {
    public static void main(String[] args) {
        new Myicon().init();
    }
}

class Myicon extends JFrame implements Icon{ //two elements are mixed
    private  int w;
    private  int h;
    public Myicon(){}
    public Myicon(int width, int height){
        w = width;
        h = height;
    }
    public void init(){
        setVisible(true);
        setBounds(200,200,400,300);
        getContentPane().add(new JLabel("icon on it",new Myicon(30,30),SwingConstants.CENTER));
    }

    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        g.fillOval(x,y,w,h);
    }

    @Override
    public int getIconWidth() {
        return w;
    }

    @Override
    public int getIconHeight() {
        return h;
    }

}

输出结果:

以上代码中,main函数里的new Myicon用来创建窗口,Myicon类里的new Myicon用来创建图标。

所以此处的Myicon虽然只是一个类,其实有两种用途,这是因为它既继承了Jframe类,又实现了Icon接口

添加图片图标

以下代码展示如何给一个label添加图片图标:

package com.cxf.gui.icon2;

import javax.swing.*;
import java.net.URL;

public class TestForPicIcon {
    public static void main(String[] args) {
        new Myframe().init();
    }
}

class Myframe extends JFrame{
    public void init(){
        setVisible(true);
        setBounds(100,100,400,300);
        JLabel label = new JLabel("imageicon on it");
        URL url = Myframe.class.getResource("diga.jfif");
        assert url != null;
        label.setIcon(new ImageIcon(url));
        label.setHorizontalAlignment(SwingConstants.CENTER);
        getContentPane().add(label);
    }
}

输出结果:

此处没有用到Icon接口,而是使用了Jlabel的seticon方法。

图片需要放在与代码同级的目录中。

posted on 2021-09-27 14:11  菜小疯  阅读(176)  评论(0编辑  收藏  举报