文章目录
- 一、界面概览
- 二、代码
- 三、代码解释
- 四、项目全部代码下载地址
- 五、 项目代码说明
- 六、功能更新:根据下拉单内容查询不同数据库
- 6.1 界面概览
- 6.2 用到的主要控件
 
- 七、其他相关博客
- 7.1 <a href="https://blog.csdn.net/SKMIT/article/details/106676478">Java窗体的创建,按钮的响应(最基础级别)
- 7.2 <a href="https://blog.csdn.net/SKMIT/article/details/118328398">JavaGUI开发实践:登录界面模拟(连接数据库)
- 7.3 项目全部代码下载地址
 
本人所作的其他相关博客:
 Java窗体的创建,按钮的响应(最基础级别)
 JavaGUI开发实践:登录界面模拟(连接数据库,不同身份用户进入不同界面)
 这边建议各位使用快捷的窗体开发工具,JwindowBuilder,所有的窗体控件都是拖拽式的。具体使用各种博客都有。这里就不再赘述。
注意: 下面的代码不是很严谨,当时写的时候没注意,就是数据库连接使用完毕后,记得释放资源。
一、界面概览

 获取数据库中的数据后,结果如图所示:
 
 (1) 点击按钮“显示数据”后连接数据库信息:这里做的样例比较少。
(2) 点击"确定"或者取消以后,退出界面。
 (3)点击“”取消按钮退出该界面。
以下是我的数据库信息:数据库版本为8.0.20
 
 下面是数据库的变量名和数据类型。
 
一定要清楚自己数据库的各个量的数据类型,在后面获取结果集显示到表格中需要对应。
二、代码
package newGUI;import javax.swing.*;
import javax.swing.table.JTableHeader;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class SalesStatisticsFrame extends JFrame {private JScrollPane scpDemo;private JTableHeader jth;private JTable tabDemo;private JButton btnShow;private JButton bt1;private JButton bt2;{try {for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}} catch (Exception e) {System.out.println(e);}}public SalesStatisticsFrame() {super("生成采购报表");        //JFrame的标题名称this.setSize(660, 600);        //控制窗体大小this.setLayout(null);        //自定义布局this.setLocation(400, 100);    //点击运行以后,窗体在屏幕的位置this.scpDemo = new JScrollPane();this.bt1 = new JButton("确定");this.bt2 = new JButton("取消");this.btnShow = new JButton("显示数据");this.bt1.setBounds(100, 480, 100, 30);this.bt2.setBounds(380, 480, 100, 30);this.scpDemo.setBounds(10, 50, 580, 400);    //设置滚动框大小this.btnShow.setBounds(10, 10, 120, 30);    //设置按钮this.btnShow.addActionListener(new ActionListener()    //给“显示数据”按钮添加事件响应。{public void actionPerformed(ActionEvent ae) {btnShow_ActionPerformed(ae);}});/********按钮“确定”的响应*******/this.bt1.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});/******按钮 “取消”的响应*****/this.bt2.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}});/******* 将组件加入到窗体中******/add(this.scpDemo);add(this.btnShow);add(this.bt1);add(this.bt2);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String[] args) {new SalesStatisticsFrame();}/***连接数据库并显示到表格中***/public void btnShow_ActionPerformed(ActionEvent ae) {try {Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/supermarket?serverTimezone=CTT";//注意设置时区String username = "root";String passwords = "Yuanfeng200517";Connection conn = DriverManager.getConnection(url, username, passwords);String sql = "select * from sellsreport";PreparedStatement pstm = conn.prepareStatement(sql);ResultSet rs = pstm.executeQuery();int count = 0;while (rs.next()) {count++;}rs = pstm.executeQuery();// 将查询获得的记录数据,转换成适合生成JTable的数据形式Object[][] info = new Object[count][6];String[] title = {"序号", "商品名称", " 商品数量", "成本价", "售价", "库存余量"};count = 0;while (rs.next()) {info[count][0] = Integer.valueOf(rs.getInt("id"));info[count][1] = rs.getString("name");info[count][2] = Integer.valueOf(rs.getInt("quantity"));info[count][3] = rs.getString("cost");info[count][4] = rs.getString("sellingprice");info[count][5] = rs.getString("strockmargin");count++;}// 创建JTablethis.tabDemo = new JTable(info, title);// 显示表头this.jth = this.tabDemo.getTableHeader();// 将JTable加入到带滚动条的面板中this.scpDemo.getViewport().add(tabDemo);} catch (ClassNotFoundException cnfe) {cnfe.printStackTrace();JOptionPane.showMessageDialog(null, "数据源错误", "错误", JOptionPane.ERROR_MESSAGE);} catch (SQLException sqle) {sqle.printStackTrace();JOptionPane.showMessageDialog(null, "数据操作错误", "错误", JOptionPane.ERROR_MESSAGE);}}
}三、代码解释
- 首先,下面的代码是用来控制Java GUI 风格的:整个try用一个大括号包起来就不会出错了。
 {try {for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {if ("Nimbus".equals(info.getName())) {javax.swing.UIManager.setLookAndFeel(info.getClassName());break;}}} catch (Exception e) {System.out.println(e);}}
- 连接数据库操作说明:
 (1) 首先连接数据库,连接以后用count变量存储数据库中有多少行。
Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/supermarket?serverTimezone=CTT";//注意设置时区String username = "root";String passwords = "Yuanfeng200517";Connection conn = DriverManager.getConnection(url, username, passwords);PreparedStatement pstm = conn.prepareStatement(sql);ResultSet rs = pstm.executeQuery();String sql = "select * from sellsreport";int count = 0;while(rs.next()){count++;}
用数组title来存储你想要显示的中的列属性名
String []title= {"序号","商品名称"," 商品数量","成本价","售价","库存余量"};
实际显示就是这样:
 
我们用一个二维数组来存储数据库中的二维表,
  Object[][] info = new Object[count][6]; 
 然后遍历结果集,将获取每行的数据:
count = 0;		//这里要清零,因为后面count要从0加到数据库中的行数。while(rs.next()){info[count][0] = Integer.valueOf( rs.getInt("id"));		//id是数据库中的变量名info[count][1] = rs.getString("name");info[count][2] = Integer.valueOf( rs.getInt("quantity") );info[count][3] = rs.getString("cost");info[count][4] = rs.getString("sellingprice");info[count][5] = rs.getString("strockmargin");count++;}
上面代码中:
如果数据库中变量是int型的,那么用 Integer.valueOf( rs.getInt("id"));	
如果数据库中变量是string型的,那么用  rs.getString("sellingprice");  引号内的字符是数据库中的变量名,必须和数据库的变量名称一样。
最后,我们把获得的数据变成表格的形式显示其中,JavaGUI用的是JTabel
// 创建JTablethis.tabDemo = new JTable(info,title);// 显示表头this.jth = this.tabDemo.getTableHeader();// 将JTable加入到带滚动条的面板中this.scpDemo.getViewport().add(tabDemo); }
项目全部代码下载地址: JavaGUI超市进销存管理系统 所有代码
四、项目全部代码下载地址
JavaGUI超市进销存管理系统 所有代码
五、 项目代码说明
有关项目的代码说明:
 项目结构如下图(有很多功能用不上了,有些就是仅仅界面,没有任何响应。):
 
说明:
-  下面这个是连接数据库,生成采购报表的代码代码: SalesStatisticFrame.java
 `` 
-  下面这个是登录界面代码, Load_GUI.java
  
-  其他的界面可以根据类名,或者直接运行来看,时间有点儿久了,忘记了。。 
大一写的代码,很乱很不完整,见谅见谅
项目文件地址:JavaGUI超市进销存管理系统 所有代码
六、功能更新:根据下拉单内容查询不同数据库
这部分的功能更新已经放到我上面发的项目内了
我们实现的就是“设备信息详情”GUI界面。我们这个设备是,零售机设备,每个零售机中存储不同的商品。实现的数据查询内容就是根据设备名称查询设备中的商品信息。
另外两个界面,生成数据报表GUI代码没有贴出来。
6.1 界面概览

上面的级联查询GUI代码分别在项目中的 EquipGoodsTable.java ,EquipInfoTable.java,都已经更新了。有需要读者可以自行下载。JavaGUI超市进销存管理系统 所有代码
6.2 用到的主要控件
我们主要用的是JComboBox控件,主要用到的方法就是:
-  jc1.getSelectedItem().toString(); //获取选择的下拉单的内容并转换成String类型。 
-  jc1.addItem(“设备1号”); 
 jc1.addItem(“设备2号”);
 jc1.addItem(“设备3号”);
 jc1.addItem(“设备4号”);; //给下拉单添加内容选项。这里是死的,其实也可以从数据库中获取
-  细节,sql拼接字符串,将下拉单选中的内容拼接到sql语句中:注意单引号和双引号不要缺失,否则报语法错误。 
geteqp=jc1.getSelectedItem().toString();
System.out.println(geteqp);
String sql = "select * from goods where belongs='"+geteqp+"'"; 
这里的belongs是数据库中的字段名(就是数据库中列名)。
 这里解释一下,为什么单引号中还要有双引号和+。这是因为,我们如果写到Navicat,使用SQL查询,可以这样写:
SELECT * FROM goods WHERE belongs=‘设备1号’;
也就是说,如果我们直接在Navicat查询,上面这个查询语句就是根据belongs值(belongs是varchar类型的)来查询。那么,如果要在Java语句中, 我们要将获取到的下拉单的值用String变量geteqp存储,然后,为了避免将变量识别为字符串,我们就要加上转义字符"++",两个加号中间填的就是变量的名字,这样就不会将变量geteqp识别为字符串了。所以最终的SQL查询语句是:
"SELECT * FROM goods WHERE belongs='"+geteqp+"'";
七、其他相关博客
7.1 Java窗体的创建,按钮的响应(最基础级别)
7.2 JavaGUI开发实践:登录界面模拟(连接数据库)
7.3 项目全部代码下载地址
有兴趣看整个项目代码的,可以看看下面的分享下面的链接。
JavaGUI超市进销存管理系统 所有代码
其实最主要的功能模块已经总结在我分享的博客和这个博客了,不过,这个系统还有很多需要实现的,上面分享的项目里面还有很多未完善的功能,各位可以自己去拓展一下,SQL语句真的很重要…

















