📄 jadvlabel.java
字号:
package PictureDrawer;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.Icon;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;
import java.awt.event.MouseMotionListener;
/**
* 对JLabel类进行了扩展,提供了一些图像处理功能
*/
public class JAdvLabel extends JLabel implements MouseMotionListener{
/**
* 放大镜的宽度和高度
*/
private static final int MAGINIFIER_W_H = 60;
/**
* RGB格式的buffered_image
*/
BufferedImage buffered_image;
/**
* ARGB格式的buffered_image
*/
BufferedImage abuffered_image;
/**
* 当前图像的ImageIcon
*/
ImageIcon image_icon;
/**
* 当前文件的文件名
*/
String filename;
/**
* 当前图像的宽度和高度
*/
int width, height;
/**
* 当前放大镜的起始坐标
*/
private int magX, magY;
/**
* 是否显示放大镜的标志。
*/
private boolean showMagnifier = false;
/**
* 构造函数
* <p>
* @param filename 要打开的文件的名字和路径
*/
public JAdvLabel(String filename) {
this.filename = filename;
setImageIcon(new ImageIcon(filename));
addMouseMotionListener(this);
}
/**
* 缺省的构造函数,和父类JLabel相同
*/
public JAdvLabel() {
super();
addMouseMotionListener(this);
}
/**
* 设置当前显示的ImageIcon
* <p>
* @param icon 要被显示的ImageIcon,
* 这里是对父类的setIcon函数功能进行了扩展
* 通过本方法,可以设置ImageIcon。
*/
public void setImageIcon(ImageIcon icon) {
image_icon = icon;
width = icon.getIconWidth();
height = icon.getIconHeight();
buffered_image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
buffered_image.createGraphics().drawImage(
image_icon.getImage(),0,0,null);
abuffered_image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_ARGB);
abuffered_image.createGraphics().drawImage(
image_icon.getImage(),0,0,null);
setIcon((Icon)icon);
}
/**
* 当放大镜标志为true时,绘制放大镜以及放大内容
*/
public void paint(Graphics g){
super.paint(g);
if (showMagnifier) {
g.setColor(Color.RED.darker());
//绘制边框
g.drawRect(magX,magY, MAGINIFIER_W_H+2,MAGINIFIER_W_H+2);
//绘制放大图像,放大图像以鼠标当前位置为中心
int sx1 = magX - MAGINIFIER_W_H/4;
int sy1 = magY - MAGINIFIER_W_H/4;
int sx2 = sx1 + MAGINIFIER_W_H/2;
int sy2 = sy1 + MAGINIFIER_W_H/2;
if (sx1<0) {
sx1=0;
sx2=MAGINIFIER_W_H/2;
}
if (sy1<0) {
sy1=0;
sy2=MAGINIFIER_W_H/2;
}
g.drawImage(buffered_image,
magX+1,magY+1,
magX+MAGINIFIER_W_H+2,magY+MAGINIFIER_W_H+2,
//源图像的位置
sx1,sy1,sx2,sy2,null);
}
}
/**
* 设置显示或者隐藏放大镜
* <p>
* @parma show 是否显示放大镜,当为true时显示,否则不显示。
*/
public void showMagnifier(boolean show) {
showMagnifier = show;
repaint();
}
/**
* 返回是否显示放大镜
* <p>
* @return showMagnifier 返回是否显示放大镜标志。
*/
public boolean isShowMagnifier() {
return showMagnifier;
}
public void mouseDragged(java.awt.event.MouseEvent e) {
}
/**
*处理鼠标事件,移动放大镜。
*/
public void mouseMoved(java.awt.event.MouseEvent e) {
if ((showMagnifier) &&
(e.getX()<=width) &&
(e.getY()<=height)){
magX = e.getX();
magY = e.getY();
repaint();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -