Java实战之图书管理系统(swing版)(5)——图书类别添加界面及功能实现

在上一节中完成了主界面的创建,那么在本节中将实现图书类别的添加功能,BookTypeAddPanel.java类文件在上一节中已经创建成功,那么直接在该文件内写代码即可。

由于从本节开始使用了数据库,所以需要导入链接数据库的jar包,并且数据库及表已经创建完成,只需要执行db_booksystem.sql中的SQL语句即可。

使用MySQL时需要注意:

当数据库准备好之后,还需要创建如下图几个类:

其中各个类的内容如下:

BookTypeBean.java

package bookManageSystem.bean;
​
public class BookTypeBean {
    private int bookTypeId;
    private String bookTypeName;
    private String bookTypeDescription;
​
    public BookTypeBean() {
    }
​
    public BookTypeBean(int bookTypeId, String bookTypeName, String bookTypeDescription) {
        this.bookTypeId = bookTypeId;
        this.bookTypeName = bookTypeName;
        this.bookTypeDescription = bookTypeDescription;
    }
​
    public int getBookTypeId() {
        return bookTypeId;
    }
​
    public void setBookTypeId(int bookTypeId) {
        this.bookTypeId = bookTypeId;
    }
​
    public String getBookTypeName() {
        return bookTypeName;
    }
​
    public void setBookTypeName(String bookTypeName) {
        this.bookTypeName = bookTypeName;
    }
​
    public String getBookTypeDescription() {
        return bookTypeDescription;
    }
​
    public void setBookTypeDescription(String bookTypeDescription) {
        this.bookTypeDescription = bookTypeDescription;
    }
}

实体类的属性是根据数据库对应表的列字段进行创建的。

BookTypeDao.java

package bookManageSystem.dao;
​
import java.sql.Connection;
import java.sql.Statement;
​
public class BookTypeDao {
​
    /**
     * 操作结果:根据SQL语句执行数据库的增删改操作
     *
     * @param sql SQL语句
     * @return boolean 如果操作数据库成功返回true,否则返回false
     */
    public boolean dataChange(String sql) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //获得数据的连接
            new JDBCUtils();
            conn = JDBCUtils.getConnection();
            //获得Statement对象
            stmt = conn.createStatement();
            //发送SQL语句并返回受影响行数
            int num = stmt.executeUpdate(sql);
            // 根据受影响行数判断是否操作成功
            if (num > 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCUtils.release(stmt, conn);
        }
        return false;
    }
}

JDBCUtils.java

package bookManageSystem.dao;
​
import java.sql.*;
​
/**
 * 连接JDBC类
 */
public class JDBCUtils {
​
    /**
     * 加载驱动,并建立数据库连接
     *
     * @return 返回数据库连接
     * @throws SQLException           抛出SQLException
     * @throws ClassNotFoundException 抛出ClassNotFoundException
     */
    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        // 设置数据库驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 数据库链接URL及数据库名称
        String url = "jdbc:mysql://localhost:3306/db_bookSystem";
        // 登录账户名
        String username = "root";
        // 登录账户密码
        String password = "admin";
        // 创建连接
        Connection conn = DriverManager.getConnection(url, username, password);
        return conn;
    }
​
    /**
     * 关闭数据库连接,释放资源
     *
     * @param stmt Statement对象
     * @param conn Connection对象
     */
    public static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
​
    /**
     * 关闭数据库连接,释放资源
     *
     * @param rs   ResultSet对象
     * @param stmt Statement对象
     * @param conn Connection对象
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        release(stmt, conn);
    }
​
}

操作数据库表的相关方法会在等会使用。

打开BookTypeAddPanel.java,然后将内容变成如下代码:

package bookManageSystem.view;
​
import bookManageSystem.dao.BookTypeDao;
import bookManageSystem.tools.ComponentTools;
​
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
​
public class BookTypeAddPanel extends JPanel implements ActionListener {
    private ComponentTools componentTools = new ComponentTools();
​
    private Box totalVBox, funcationBox, typeNameBox, typeDescriptionBox, buttonBox;
    private JLabel typeNameLabel, bookTypeAddFuncationLabel, typeDescriptionLabel;
    private JTextArea typeDescriptionTextArea;
    private JTextField typeNameTextField;
    private JButton addButton, resetButton;
​
​
    BookTypeAddPanel() {
        // 为图书类型添加面板添加控件
        this.add(this.createBookTypeAddBox());
        // 设置按钮的图标
        componentTools.setIcons(new JButton[]{addButton, resetButton}, new String[]{"src/bookManageSystem/images/add.png", "src/bookManageSystem/images/reset.png"});
        // 为按钮注册事件监听器
​
    }
​
    /**
     * 图书类型添加面板的控件内容
     *
     * @return 返回一个Box
     */
    private Box createBookTypeAddBox() {
        // 创建一个垂直容器盒子
        totalVBox = Box.createVerticalBox();
​
        // 创建一个水平容器盒子
        funcationBox = Box.createHorizontalBox();
        bookTypeAddFuncationLabel = new JLabel("图书类别添加功能");
        bookTypeAddFuncationLabel.setFont(new Font("微软雅黑", Font.BOLD, 30));
        funcationBox.add(bookTypeAddFuncationLabel);
        totalVBox.add(funcationBox);
        totalVBox.add(Box.createVerticalStrut(60));
​
        typeNameBox = Box.createHorizontalBox();
        typeNameLabel = new JLabel("图书类别名称:");
        typeNameTextField = new JTextField(20);
        typeNameBox.add(typeNameLabel);
        typeNameBox.add(Box.createHorizontalStrut(50));
        typeNameBox.add(typeNameTextField);
        totalVBox.add(typeNameBox);
        totalVBox.add(Box.createVerticalStrut(60));
​
        typeDescriptionBox = Box.createHorizontalBox();
        typeDescriptionLabel = new JLabel("图书类别描述:");
        typeDescriptionTextArea = new JTextArea(10, 20);
        typeDescriptionTextArea.setLineWrap(true);
        typeDescriptionBox.add(typeDescriptionLabel);
        typeDescriptionBox.add(Box.createHorizontalStrut(50));
        typeDescriptionBox.add(typeDescriptionTextArea);
        totalVBox.add(typeDescriptionBox);
        totalVBox.add(Box.createVerticalStrut(60));
​
        buttonBox = Box.createHorizontalBox();
        addButton = new JButton("添加");
        resetButton = new JButton("重置");
        buttonBox.add(addButton);
        buttonBox.add(Box.createHorizontalStrut(80));
        buttonBox.add(resetButton);
        totalVBox.add(buttonBox);
​
        return totalVBox;
    }
​
    @Override
    public void actionPerformed(ActionEvent e) {
​
    }
}

然后运行程序,成功登录后,点击“图书类别管理”下的“图书类别添加”菜单项,出现如下界面:

点击“添加”和“重置”按钮都不会有任何反应,因为这里还没有为其注册事件,为按钮注册事件的方式有几种,这里只是其中一种。

首先在BookTypeAddPanel()构造器方法内添加如下代码:

// 为按钮注册事件监听器
addButton.addActionListener(this);
resetButton.addActionListener(this);

具体位置如图:

然后就是实现actionPerformed方法了,先实现添加按钮的功能。

在actionPerformed方法内添加如下代码:

        // 添加按钮的事件处理
        if (e.getSource() == addButton) {
            // 获取图书分类名称
            String bookTypeName = typeNameTextField.getText();
            // 获取图书分类描述
            String bookTypeDescription = typeDescriptionTextArea.getText();
            // 组装SQL语句
            String sql =
                    "insert into tb_bookType (btName, btDescription) values ('" + bookTypeName + "','" + bookTypeDescription + "');";
            // 执行方法插入一条书籍
            boolean isOK = new BookTypeDao().dataChange(sql);
            // 判断是否操作成功并作出相应的处理
            if (isOK) {
                JOptionPane.showMessageDialog(null, "添加成功!");
                componentTools.reset(typeNameTextField, typeDescriptionTextArea);
            } else {
                JOptionPane.showMessageDialog(null, "添加失败!");
            }
        }

上面代码是对“添加”按钮的事件处理,接下来再次运行程序登录成功后切换到图书类别添加界面并点击“添加”按钮,会出现如下状况:

添加记录失败,并且控制台报错了,错误日志如图,分析日志可以得出是没有找到com.mysql.jdbc.Driver这个类,其实问题就是没有添加file文件夹下的jar加包。

以后遇到ClassNotFoundException这种没有找到类的异常,多半都是没有找到加包的问题。

那么接下来就是为本项目添加第三方加包了。

打开“Project Structure...”

然后选中“Libraries”选项卡

并找到jar加包

添加jar包成功

同理,其他项目添加第三方jar包也可以通过该种方式进行。

再次运行项目并点击“添加”按钮

这次就添加成功了,可以到数据库中查看添加的这一条记录:

接着就是实现重置功能,该功能的实现就是将界面中的文本框和文本域清空,代码还是在actionPerformed方法中添加如下:

        // 重置按钮的事件处理
        if (e.getSource() == resetButton) {
            // 即清空输入框的内容
            componentTools.reset(typeNameTextField, typeDescriptionTextArea);
        }

可以运行项目查询效果。

本节所讲即完成了,下一节将说明如何实现图书类别的维护这个功能的实现。

 

可搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【20200201】可获取本节的源码。

 

  • 0
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值