用Java代码编写一个程序实现一下功能 1)从已有的图象文件列表中选择某一个,即可显示该图象,并可做旋转等变换。 2)在画布区域上可以进行各种规则图形的绘制(如:线段、矩形、多边形、圆等),还可通过鼠标的拖动自由绘图。 3)可以连续播放所选文件夹下的所有图象。
时间: 2024-03-10 10:49:32 浏览: 163
好的,下面是用Java代码实现上述功能的一个简单示例:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageEditor extends JFrame implements ActionListener {
private JLabel imageLabel; // 用于显示图像的标签
private JPanel canvasPanel; // 用于绘制图形的面板
private JFileChooser fileChooser; // 文件选择器
private File[] imageFiles; // 存储图像文件列表
private int currentImageIndex = 0; // 当前显示的图像在列表中的索引
public ImageEditor() {
super("图像编辑器");
// 创建图像标签并添加到窗口中
imageLabel = new JLabel();
add(imageLabel, BorderLayout.CENTER);
// 创建画布面板并添加到窗口中
canvasPanel = new JPanel();
canvasPanel.setBackground(Color.WHITE);
canvasPanel.setPreferredSize(new Dimension(400, 300));
add(canvasPanel, BorderLayout.SOUTH);
// 创建文件选择器并设置文件过滤器
fileChooser = new JFileChooser();
fileChooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".jpg") || f.getName().toLowerCase().endsWith(".png");
}
public String getDescription() {
return "JPEG/PNG 图像文件";
}
});
// 创建菜单栏并添加菜单项
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("文件");
menuBar.add(fileMenu);
JMenuItem openItem = new JMenuItem("打开");
openItem.addActionListener(this);
fileMenu.add(openItem);
JMenuItem playItem = new JMenuItem("播放");
playItem.addActionListener(this);
fileMenu.add(playItem);
// 设置窗口大小并显示
pack();
setVisible(true);
}
// 处理菜单项事件
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("打开")) {
// 打开文件选择器并获取选中的文件列表
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
imageFiles = fileChooser.getSelectedFiles();
currentImageIndex = 0;
// 显示第一个图像
displayImage(imageFiles[currentImageIndex]);
}
} else if (e.getActionCommand().equals("播放")) {
// 创建一个定时器,每隔一段时间切换一次图像
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
currentImageIndex = (currentImageIndex + 1) % imageFiles.length;
displayImage(imageFiles[currentImageIndex]);
}
});
timer.start();
}
}
// 显示指定的图像
private void displayImage(File file) {
try {
// 加载图像并设置到标签上
Image image = ImageIO.read(file);
imageLabel.setIcon(new ImageIcon(image));
// 绘制图形
Graphics2D g2d = (Graphics2D) canvasPanel.getGraphics();
g2d.setColor(Color.BLUE);
g2d.setStroke(new BasicStroke(3.0f));
g2d.drawLine(10, 10, 100, 100);
g2d.drawRect(120, 10, 100, 50);
g2d.setColor(Color.RED);
g2d.fillOval(250, 10, 80, 80);
// 添加鼠标事件监听器,用于自由绘图
canvasPanel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
g2d.setStroke(new BasicStroke(3.0f));
g2d.drawLine(e.getX(), e.getY(), e.getX(), e.getY());
}
public void mouseDragged(MouseEvent e) {
g2d.drawLine(e.getX(), e.getY(), e.getX(), e.getY());
}
});
canvasPanel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
g2d.drawLine(e.getX(), e.getY(), e.getX(), e.getY());
}
});
} catch (Exception ex) {
JOptionPane.showMessageDialog(this, "无法加载图像文件: " + ex.getMessage());
}
}
public static void main(String[] args) {
new ImageEditor();
}
}
```
这个程序使用了Swing组件来实现图像显示和绘图功能,通过文件选择器选择图像文件后,可以在图像上进行旋转等变换,并在画布区域上进行各种规则图形的绘制,还可以通过鼠标的拖动自由绘图。同时还提供了连续播放所选文件夹下的所有图像的功能。
阅读全文