图片查看器java注解
时间: 2023-10-21 08:05:37 浏览: 74
java 图片查看器
5星 · 资源好评率100%
以下是一个简单的图片查看器的 Java 注解示例:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
* 图片查看器
*/
public class ImageViewer extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel imagePanel;
private BufferedImage image;
public ImageViewer() {
super("图片查看器");
// 初始化界面
initUI();
// 设置窗口大小
setSize(800, 600);
// 设置窗口居中显示
setLocationRelativeTo(null);
// 设置窗口关闭时退出程序
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 显示窗口
setVisible(true);
}
/**
* 初始化界面
*/
private void initUI() {
// 创建顶层面板
JPanel topPanel = new JPanel();
// 创建选择文件按钮
JButton chooseFileButton = new JButton("选择文件");
// 添加选择文件按钮点击事件监听器
chooseFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 创建文件选择器
JFileChooser fileChooser = new JFileChooser();
// 设置文件过滤器,只显示图片文件
fileChooser.setFileFilter(new FileNameExtensionFilter("Image Files", "jpg", "jpeg", "png", "gif"));
// 显示文件选择器
int result = fileChooser.showOpenDialog(ImageViewer.this);
// 判断用户是否选择了文件
if (result == JFileChooser.APPROVE_OPTION) {
// 获取用户选择的文件
File file = fileChooser.getSelectedFile();
// 加载图片
try {
image = ImageIO.read(file);
imagePanel.repaint();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
});
// 将选择文件按钮添加到顶层面板中
topPanel.add(chooseFileButton);
// 创建图像面板
imagePanel = new JPanel() {
private static final long serialVersionUID = 1L;
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制图片
if (image != null) {
// 获取图像面板的宽度和高度
int width = getWidth();
int height = getHeight();
// 计算图像的宽度和高度
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
// 计算缩放比例
double scale = Math.min((double) width / imageWidth, (double) height / imageHeight);
// 计算缩放后的图像宽度和高度
int scaledWidth = (int) (imageWidth * scale);
int scaledHeight = (int) (imageHeight * scale);
// 计算图像的位置
int x = (width - scaledWidth) / 2;
int y = (height - scaledHeight) / 2;
// 绘制图像
g.drawImage(image, x, y, scaledWidth, scaledHeight, null);
} else {
// 绘制默认提示信息
g.setColor(Color.GRAY);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE);
g.drawString("请选择一张图片", getWidth() / 2 - 50, getHeight() / 2);
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
};
// 设置图像面板的背景颜色
imagePanel.setBackground(Color.BLACK);
// 将图像面板添加到窗口中
add(imagePanel, BorderLayout.CENTER);
// 将顶层面板添加到窗口中
add(topPanel, BorderLayout.NORTH);
}
public static void main(String[] args) {
new ImageViewer();
}
}
```
在上面的代码中,我们使用了 `@Override` 注解来重写了 `JPanel` 类的 `paintComponent()` 和 `getPreferredSize()` 方法。这两个方法是 `JPanel` 类的方法,我们在重写时需要遵循其规范,否则编译器会报错。使用 `@Override` 注解可以帮助我们检查是否正确地重写了父类的方法。
此外,我们还使用了 `@SuppressWarnings("serial")` 注解来抑制了 `serial` 警告。这是因为我们的 `ImageViewer` 类实现了 `Serializable` 接口,但我们并没有给它定义一个 `serialVersionUID` 属性,这会导致编译器发出警告。使用 `@SuppressWarnings("serial")` 注解可以消除这个警告。
阅读全文