Java图片上传、浏览与管理功能实现教程

本教程将引导您使用Java实现一个简单的图片上传、浏览和管理系统。我们将涵盖以下功能:

  1. 用户登录功能: 验证用户身份
  2. 图片保存功能: 上传并保存图片到服务器
  3. 图片浏览功能: 展示图片列表
  4. 图片详情功能: 查看图片详细信息
  5. 图片信息处理功能: 修改和删除图片信息

1. 用户登录功能

// 定义登录页面
public class LoginPage extends JFrame {
    private JTextField usernameField;
    private JPasswordField passwordField;

    public LoginPage() {
        // 初始化界面
        ...
        // 添加登录按钮的监听器
        JButton loginButton = new JButton('登录');
        loginButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取用户输入的用户名和密码
                String username = usernameField.getText();
                String password = new String(passwordField.getPassword());
                // 验证用户信息是否正确
                if (validateUser(username, password)) {
                    // 跳转到主页面
                    MainFrame mainFrame = new MainFrame();
                    mainFrame.setVisible(true);
                    dispose();
                } else {
                    // 弹出错误提示
                    JOptionPane.showMessageDialog(LoginPage.this, '用户名或密码错误', '错误提示', JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        // 将登录按钮添加到界面中
        ...
    }

    // 验证用户信息是否正确
    private boolean validateUser(String username, String password) {
        // 查询数据库中是否存在该用户
        User user = UserDao.findUserByUsername(username);
        if (user == null) {
            return false;
        }
        // 判断密码是否正确
        return user.getPassword().equals(password);
    }
}

2. 图片保存功能

// 定义上传图片的界面
public class UploadImagePage extends JFrame {
    private JFileChooser fileChooser;

    public UploadImagePage() {
        // 初始化界面
        ...
        // 添加上传按钮的监听器
        JButton uploadButton = new JButton('上传');
        uploadButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 打开文件选择器
                int result = fileChooser.showOpenDialog(UploadImagePage.this);
                if (result == JFileChooser.APPROVE_OPTION) {
                    // 获取选择的文件
                    File file = fileChooser.getSelectedFile();
                    // 将文件保存到服务器上
                    saveImageToServer(file);
                    // 将图片信息保存到数据库中
                    saveImageToDatabase(file.getName(), file.getPath(), new Date(), '这是一张图片');
                    // 弹出成功提示
                    JOptionPane.showMessageDialog(UploadImagePage.this, '上传成功', '成功提示', JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });
        // 将上传按钮添加到界面中
        ...
    }

    // 将文件保存到服务器上
    private void saveImageToServer(File file) {
        // 保存文件到服务器上
        ...
    }

    // 将图片信息保存到数据库中
    private void saveImageToDatabase(String name, String path, Date createTime, String description) {
        // 将图片信息保存到数据库中
        ImageDao.addImage(name, path, createTime, description);
    }
}

3. 图片浏览功能

// 定义主页面
public class MainFrame extends JFrame {
    private JPanel imagePanel;

    public MainFrame() {
        // 初始化界面
        ...
        // 从数据库中读取用户上传的图片信息
        List<ImageInfo> imageList = getImageListFromDatabase();
        // 显示图片列表
        showImageList(imageList);
    }

    // 从数据库中读取用户上传的图片信息
    private List<ImageInfo> getImageListFromDatabase() {
        // 查询数据库中的图片信息
        List<Image> images = ImageDao.getAllImages();
        // 将查询结果转换为ImageInfo对象列表
        List<ImageInfo> imageList = new ArrayList<>();
        for (Image image : images) {
            ImageInfo imageInfo = new ImageInfo(image.getName(), image.getPath(), image.getCreateTime(), image.getDescription());
            imageList.add(imageInfo);
        }
        return imageList;
    }

    // 显示图片列表
    private void showImageList(List<ImageInfo> imageList) {
        // 清空图片面板
        imagePanel.removeAll();
        // 显示图片列表
        for (ImageInfo imageInfo : imageList) {
            // 创建图片面板
            JPanel imageItemPanel = new JPanel();
            imageItemPanel.setLayout(new BorderLayout());
            // 显示图片缩略图
            ImageIcon imageIcon = new ImageIcon(imageInfo.getPath());
            JLabel imageLabel = new JLabel(imageIcon);
            imageItemPanel.add(imageLabel, BorderLayout.CENTER);
            // 添加点击事件的监听器
            imageLabel.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    // 显示图片详情
                    showImageDetail(imageInfo);
                }
            });
            // 添加到图片面板中
            imagePanel.add(imageItemPanel);
        }
        // 刷新界面
        imagePanel.revalidate();
        imagePanel.repaint();
    }
}

4. 图片详情功能

// 定义图片详情页面
public class ImageDetailPage extends JPopupMenu {
    private JLabel nameLabel;
    private JLabel createTimeLabel;
    private JTextArea descriptionArea;

    public ImageDetailPage(ImageInfo imageInfo) {
        // 初始化界面
        ...
        // 显示图片信息
        nameLabel.setText(imageInfo.getName());
        createTimeLabel.setText(new SimpleDateFormat('yyyy-MM-dd HH:mm:ss').format(imageInfo.getCreateTime()));
        descriptionArea.setText(imageInfo.getDescription());
        // 添加修改和删除按钮的监听器
        JButton modifyButton = new JButton('修改');
        modifyButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 修改图片信息
                modifyImageInfo(imageInfo);
            }
        });
        add(modifyButton);

        JButton deleteButton = new JButton('删除');
        deleteButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 删除图片信息
                deleteImageInfo(imageInfo);
            }
        });
        add(deleteButton);
    }
}

// 在MainFram中添加showImageDetail方法
private void showImageDetail(ImageInfo imageInfo) {
    // 创建图片详情页面
    ImageDetailPage imageDetailPage = new ImageDetailPage(imageInfo);
    // 显示图片详情页面
    imageDetailPage.show(MainFrame.this, 0, 0);
}

// 修改图片信息
private void modifyImageInfo(ImageInfo imageInfo) {
    // 显示修改图片信息的对话框
    ModifyImageInfoDialog dialog = new ModifyImageInfoDialog(imageInfo);
    dialog.setVisible(true);
    // 更新数据库中的图片信息
    ImageDao.updateImage(imageInfo.getId(), dialog.getName(), dialog.getDescription());
    // 刷新图片列表
    List<ImageInfo> imageList = getImageListFromDatabase();
    showImageList(imageList);
}

// 删除图片信息
private void deleteImageInfo(ImageInfo imageInfo) {
    // 删除服务器上的图片文件
    File file = new File(imageInfo.getPath());
    if (file.exists()) {
        file.delete();
    }
    // 删除数据库中的图片信息
    ImageDao.deleteImage(imageInfo.getId());
    // 刷新图片列表
    List<ImageInfo> imageList = getImageListFromDatabase();
    showImageList(imageList);
    // 关闭图片详情页面
    setVisible(false);
}

5. 图片信息处理功能

// 定义修改图片信息的对话框
public class ModifyImageInfoDialog extends JDialog {
    private JTextField nameField;
    private JDateChooser createTimeField;
    private JTextArea descriptionArea;
    private String name;
    private Date createTime;
    private String description;

    public ModifyImageInfoDialog(ImageInfo imageInfo) {
        // 初始化界面
        ...
        // 显示图片信息
        nameField.setText(imageInfo.getName());
        createTimeField.setDate(imageInfo.getCreateTime());
        descriptionArea.setText(imageInfo.getDescription());
        // 添加保存按钮的监听器
        JButton saveButton = new JButton('保存');
        saveButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 保存修改后的图片信息
                name = nameField.getText();
                createTime = createTimeField.getDate();
                description = descriptionArea.getText();
                setVisible(false);
            }
        });
        // 将保存按钮添加到界面中
        ...
    }

    public String getName() {
        return name;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public String getDescription() {
        return description;
    }
}

// 在ImageDao中添加以下方法
public static List<Image> getAllImages() {
    List<Image> images = new ArrayList<>();
    try {
        Connection conn = getConnection();
        String sql = 'SELECT * FROM images';
        PreparedStatement ps = conn.prepareStatement(sql);
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Image image = new Image(rs.getInt('id'), rs.getString('name'), rs.getString('path'), rs.getDate('create_time'), rs.getString('description'));
            images.add(image);
        }
        closeConnection(conn, ps, rs);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return images;
}

public static void addImage(String name, String path, Date createTime, String description) {
    try {
        Connection conn = getConnection();
        String sql = 'INSERT INTO images (name, path, create_time, description) VALUES (?, ?, ?, ?)';
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, name);
        ps.setString(2, path);
        ps.setDate(3, new java.sql.Date(createTime.getTime()));
        ps.setString(4, description);
        ps.executeUpdate();
        closeConnection(conn, ps);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

public static void updateImage(int id, String name, String description) {
    try {
        Connection conn = getConnection();
        String sql = 'UPDATE images SET name=?, description=? WHERE id=?';
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1, name);
        ps.setString(2, description);
        ps.setInt(3, id);
        ps.executeUpdate();
        closeConnection(conn, ps);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

public static void deleteImage(int id) {
    try {
        Connection conn = getConnection();
        String sql = 'DELETE FROM images WHERE id=?';
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, id);
        ps.executeUpdate();
        closeConnection(conn, ps);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
Java图片上传、浏览与管理功能实现教程

原文地址: https://www.cveoy.top/t/topic/f1Kz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录