给组件添加图标
给组件添加图标
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方法。
图片需要放在与代码同级的目录中。