5.3 Icon && ImageIcon
5.3.1 Icon 图标
- Icon 是一个接口,可以直接拿来用!也可以 implements 的实现,进行方法 重写。来 写一些 自己需要的代码和功能。
- Icon 里面的方法,会有 基于 AWT 的东西。所以需要 导入 AWT 类库。
- 一般也是 和 JFrame 联用。
- 三个方法
@Override
//画图标
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x, y, width, height);
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.height;
}
Ico 这个接口,不属于 JFrame。所以无法 直接 画在 JFrame 窗体上。
但是 JFrame 的组件,在 创建的时候,有一个参数是 可以接收 Ico 类型的。证明 JFrame 的组件 是 通过这种方式 与 Ico 接口连用的。
- 图标标签(实例代码)
package com.muquanyu.lesson04;
import javax.swing.*;
import java.awt.*;
//图标,需要实现类
public class IconDemo extends JFrame implements Icon {
private int width;
private int height;
public IconDemo() {
}
public IconDemo(int width,int height) {
this.width = width;
this.height = height;
}
public void Init()
{
IconDemo iconDemo = new IconDemo(15, 15);
//图标放在标签,也可以放在按钮上!
//图标是和其它东西 组合的。
final JLabel label = new JLabel("icoTest", iconDemo, SwingConstants.CENTER);
Container container = this.getContentPane();
container.add(label);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
IconDemo iconDemo = new IconDemo();
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x, y, width, height);
}
@Override
public int getIconWidth() {
return this.width;
}
@Override
public int getIconHeight() {
return this.height;
}
}
final JLabel label = new JLabel(“icoTest”, iconDemo, SwingConstants.CENTER);
第二个参数就是 我们创建的 icon,因为 IconDemo 是 Icon 的实现,所以 IconDemo 可以代表 Icon,画出来的图标,就可以 添加到 新创建的 组件上!
5.3.2 ImageIcon 图标
ImageIcon 是一个普通的类,它 实现了Icon的接口,Serializable、Accessible 这些接口,是一个 Icon 的升级版本!
ImageIcon 最比Icon 突出的地方就是 可以画 图片,而且还可以 规定图片的大小来作为图标。
- 获取 图片路径
URL url = ImageIconDemo.class.getResource("头像.jpg");
这是获取 当前目录下的 图片路径!
- 直接创建 ImageIcon 对象
ImageIcon imageIcon = new ImageIcon(url);
这个 ImageIcon 对象 依赖于 图片文件的路径
- Image 设置图像大小
Image img = imageIcon.getImage().getScaledInstance(100,100,1);
getScaledInstance(宽度,高度,标识符); 是用来生成一个 新的 图像数据的。
- 设置标签的Icon
JLabel label = new JLabel("ImageIcon");
label.setIcon(imageIcon);
- 代码展示
package com.muquanyu.lesson04;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class ImageIconDemo extends JFrame {
// IO 流
public ImageIconDemo() {
//获取文件的路径 当前路径下的
URL url = ImageIconDemo.class.getResource("头像.jpg");
setSize(500,500);
ImageIcon imageIcon = new ImageIcon(url);
Image img = imageIcon.getImage().getScaledInstance(100,100,1);
imageIcon.setImage(img);
//创建标签
JLabel label = new JLabel("ImageIcon");
label.setIcon(imageIcon);
label.setHorizontalAlignment(SwingConstants.CENTER);
Container container = getContentPane();
container.add(label);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
ImageIconDemo imageIconDemo = new ImageIconDemo();
}
}