Java 图形界面开发--图文并茂建立学生管理系统

2017-01-13 14:59:46来源:csdn作者:qq_25827845人点击

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501冷血之心的博客)

图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。

这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统。虽然说不入大神法眼,但这确实是费了自己不少心血。对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调。在此分享出来希望对和我一样的菜鸟有帮助。

程序完整代码下载地址见:

https://github.com/chaohuangtianjie994/The-System-of-Student-Manager

步骤一:静态登录界面的实现。

代码如下:

/**
* 功能:学生成绩管理系统
* 步骤1、登录界面的静态实现
* author:ywq
*/
import java.awt.*;
import javax.swing.*;
public class Login extends JFrame{
//定义组件
JPanel jp1,jp2,jp3;//面板
JLabel jlb1,jlb2;//标签
JButton jb1,jb2;//按钮
JTextField jtf;//文本
JPasswordField jpf;//密码
public static void main(String[] args) {
Login win=new Login();
}//构造函数
public Login(){
//创建面板
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//创建标签
jlb1=new JLabel("用户名");
jlb2=new JLabel("密码");
//创建按钮
jb1=new JButton("登录");
jb2=new JButton("重置");
//创建文本框
jtf=new JTextField(10);
//创建密码框
jpf=new JPasswordField(10);//设置布局管理
this.setLayout(new GridLayout(3, 1));//网格式布局//加入各个组件
jp1.add(jlb1);
jp1.add(jtf);jp2.add(jlb2);
jp2.add(jpf);jp3.add(jb1);
jp3.add(jb2);//加入到JFrame
this.add(jp1);
this.add(jp2);
this.add(jp3);//设置窗体
this.setTitle("用户登录");//窗体标签
this.setSize(300, 150);//窗体大小
this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
this.setVisible(true);//显示窗体//锁定窗体
this.setResizable(false);
}
}

运行界面如图所示:

本静态界面的实现,使用了网格布局,3行1列,在每一行中放入了一个JPanel面板,每个面板上又分别放入所需的组件,整体构成了一个静态的登录界面。

步骤二:添加监听,并且进行验证用户名和密码。

代码如下:

/*
* 功能:学生成绩管理系统
* 步骤1:登录界面的静态实现
* 步骤2:添加对各个组件的监听。
* 步骤3:对用户名和密码进行验证。
* author:ywq
*/
package com.package_1;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class Login extends JFrame implements ActionListener {//定义组件
JButton jb1,jb2=null;
JRadioButton jrb1,jrb2=null;
JPanel jp1,jp2,jp3,jp4=null;
JTextField jtf=null;
JLabel jlb1,jlb2,jlb3=null;
JPasswordField jpf=null;
ButtonGroup bg=null;//设定用户名和密码
final String stu_name="6";
final String stu_pwd="1";
final String tea_name="5";
final String tea_pwd="1";public static void main(String[] args) {
// TODO Auto-generated method stub
Loginms=new Login();
}
public Login()
{
//创建组件
jb1=new JButton("登录");
jb2=new JButton("重置");
//设置监听
jb1.addActionListener(this);
jb2.addActionListener(this);jrb1=new JRadioButton("教师");
jrb2=new JRadioButton("学生");
bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jrb2.setSelected(true);jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();jlb1=new JLabel("用户名:");
jlb2=new JLabel("密码:");
jlb3=new JLabel("权限:");jtf=new JTextField(10);
jpf=new JPasswordField(10);
//加入到JPanel中
jp1.add(jlb1);
jp1.add(jtf);jp2.add(jlb2);
jp2.add(jpf);jp3.add(jlb3);
jp3.add(jrb1);
jp3.add(jrb2);jp4.add(jb1);
jp4.add(jb2);//加入JFrame中
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
//设置布局管理器
this.setLayout(new GridLayout(4,1));
//给窗口设置标题
this.setTitle("学生成绩管理系统");
//设置窗体大小
this.setSize(300,200);
//设置窗体初始位置
this.setLocation(200, 150);
//设置当关闭窗口时,保证JVM也退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
this.setResizable(true);}
@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="登录")
{
//如果选中教师登录
if(jrb1.isSelected())
{
tealogin();
}else if(jrb2.isSelected()) //学生在登录系统
{
stulogin();
}}else if(e.getActionCommand()=="重置")
{
clear();
}} //学生登录判断方法
public void stulogin()
{
if(stu_name.equals(jtf.getText())&&stu_pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
clear();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
clear();
}
}
//教师登录判断方法
public void tealogin()
{
if(tea_name.equals(jtf.getText())&&tea_pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
clear();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
clear();
}
}
//清空文本框和密码框
publicvoid clear()
{
jtf.setText("");
jpf.setText("");
}}

运行界面如下所示:


本程序加入了对各个组件的监听,首先implements ActionListener接口,然后注册监听。在ActionPerformance方法中进行相应的处理事件。

当点击登录按钮时,首先判断是哪个权限的用户在进行登录,分别调用taelogin()和stulogin()方法来进行验证。在验证方法中,对文本框和密码框的内容进行一个判断,分别弹出不同的提示信息。

步骤三:(1)程序连接数据库来进行用户名和密码的验证!!!

(2)验证成功后进行界面的切换!!!

代码如下:

/*
* 功能:学生成绩管理系统
* 步骤1、登录界面的静态实现
* 步骤2:实现界面的切换
* 步骤3:使用数据库来验证用户名和密码
* author:ywq
*/
package com.package_2;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class login extends JFrame implements ActionListener {//定义登录界面的组件
JButton jb1,jb2,jb3=null;
JRadioButton jrb1,jrb2=null;
JPanel jp1,jp2,jp3,jp4=null;
JTextField jtf=null;
JLabel jlb1,jlb2,jlb3=null;
JPasswordField jpf=null;
ButtonGroup bg=null;//设定用户名和密码
static String userword;
static String pwd;static Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;public static void main(String[] args) {
// TODO Auto-generated method stub
loginms=new login();
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
ct=DriverManager.getConnection("jdbc:odbc:ywq");
} catch (Exception e) {e.printStackTrace();
}}
//构造函数
public login()
{
//创建组件
jb1=new JButton("登录");
jb2=new JButton("重置");
jb3=new JButton("退出");
//设置监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
//以上三个按钮的监听统一放在了actionPerformance()中
//监听也可以是下边这种方式
//jb3.addActionListener(new ActionListener()
//{
//
//@Override
//public void actionPerformed(ActionEvent e) {
//// TODO Auto-generated method stub
//System.exit(0);
//}
//
//});jrb1=new JRadioButton("教师");
jrb2=new JRadioButton("学生");
bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jrb2.setSelected(true);jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();jlb1=new JLabel("用户名:");
jlb2=new JLabel("密码:");
jlb3=new JLabel("权限:");jtf=new JTextField(10);
jpf=new JPasswordField(10);
//加入到JPanel中
jp1.add(jlb1);
jp1.add(jtf);jp2.add(jlb2);
jp2.add(jpf);jp3.add(jlb3);
jp3.add(jrb1);
jp3.add(jrb2);jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);//加入JFrame中
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
//设置布局管理器
this.setLayout(new GridLayout(4,1));
//给窗口设置标题
this.setTitle("学生成绩管理系统");
//设置窗体大小
this.setSize(300,200);
//设置窗体初始位置
this.setLocation(200, 150);
//设置当关闭窗口时,保证JVM也退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
this.setResizable(true);}
@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="退出")
{
System.exit(0);
}else if(e.getActionCommand()=="登录")
{
//如果选中教师登录
if(jrb1.isSelected())
{
//创建火箭车
try {
ps=ct.prepareStatement("select * from info where 权限=? ");
//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, "教师");
//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs=ps.executeQuery();
//循环取出
while(rs.next()){
//将教师的用户名和密码取出
userword=rs.getString(2);
pwd=rs.getString(3);
System.out.println("成功获取到密码和用户名from数据库");
System.out.println(userword+"/t"+pwd+"/t");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
tealogin();
}else if(jrb2.isSelected()) //学生在登录系统
{
//创建火箭车
try {
ps=ct.prepareStatement("select * from info where 权限=? ");
//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, "学生");
//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs=ps.executeQuery();
//循环取出
while(rs.next()){
//将学生的用户名和密码取出
userword=rs.getString(2);
pwd=rs.getString(3);
System.out.println("成功获取到密码和用户名from数据库");
System.out.println(userword+"/t"+pwd+"/t");
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
stulogin();
}}else if(e.getActionCommand()=="重置")
{
clear();
}}
//清空文本框和密码框
publicvoid clear()
{
jtf.setText("");
jpf.setText("");
}
//学生登录判断方法
public void stulogin()
{
if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
clear();
//关闭当前界面
dispose();
//创建一个新界面
UI ui=new UI();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
clear();
}
}//教师登录判断方法
public void tealogin()
{
if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
clear();
//关闭当前界面
dispose();
//创建一个新界面,适用于教师来管理学生
UI ui=new UI();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
clear();
}
}}

首先建立相应的数据库,如图所示:


在程序中,首先是在主函数中(1)加载数据库驱动 。(2)建立连接

此处有问题,可参考博客 http://blog.csdn.net/qq_25827845/article/details/50836362

在进行验证时,通过建立“火箭车”将所需的SQL语句发送到数据库,并且查询得到相应的数据。利用此数据和用户输入的用户名和密码进行验证。当验证成功时,即进行界面的跳转。

页面跳转关键部分:

(1)调用dispose()方法关闭当前界面

(2)重新new一个新界面,比如本例中的new UI();其中,UI是另一个完整的界面。

如此实现了界面的切换。

UI界面的代码如下:

package com.package_2;import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class UI extends JFrame implements ActionListener
{ //定义组件
JButton jb1,jb2=null;
JPanel jp1,jp2,jp3=null;
JLabel jlb1,jlb2,jlb3,jlb4=null;public static void main(String[] args) {
// TODO Auto-generated method stub
//UIui=new UI();
}//构造函数
publicUI()//不能申明为void!!!!!否则弹不出新界面
{
//创建组件
jb1=new JButton("课程管理");
jb2=new JButton("成绩查询");jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();jlb1=new JLabel("姓名");
jlb2=new JLabel("学号");
jlb3=new JLabel("最新公告:");
jlb4=new JLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);
jp1.add(jlb2);jp2.add(jb1);
jp2.add(jlb3);jp3.add(jb2);
jp3.add(jlb4);
this.add(jp1);
this.add(jp2);
this.add(jp3);//设置布局管理器
this.setLayout(new GridLayout(3,3,50,50));
this.setTitle("学生成绩管理系统");
this.setSize(400,300);
this.setLocation(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub}
}

以上程序的执行结果如图所示:

步骤4:(1)程序连接数据库来进行用户名和密码的验证!!!

(2)验证成功后进行界面的切换!!!【对步骤三的代码进行一定的优化】


代码如下:Login.java

/*
* 功能:学生成绩管理系统
* 步骤1、登录界面的静态实现
* 步骤2:实现界面的切换
* 步骤3:使用数据库来验证用户名和密码
* 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
* author:ywq
*/
package com.package_5;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class Login extends JFrame implements ActionListener {//定义登录界面的组件
JButton jb1,jb2,jb3=null;
JRadioButton jrb1,jrb2=null;
JPanel jp1,jp2,jp3,jp4=null;
JTextField jtf=null;
JLabel jlb1,jlb2,jlb3=null;
JPasswordField jpf=null;
ButtonGroup bg=null;//菜单项
JMenuBar jmb=null;
JMenu jm=null;
JMenuItem jmi1,jmi2=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Loginms=new Login();
}
//构造函数
public Login()
{
//创建组件
jb1=new JButton("登录");
jb2=new JButton("重置");
jb3=new JButton("退出");
//设置监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);jmb=new JMenuBar(); //JMenuBar指菜单栏
jm=new JMenu("选项"); //JMenu是菜单栏中的选项栏
jmi1=new JMenuItem("开始"); //JMenuItem指选项栏中的选项
jmi2=new JMenuItem("退出系统");
jm.add(jmi1);
jm.add(jmi2);
jmb.add(jm);
jrb1=new JRadioButton("教师",true);
jrb2=new JRadioButton("学生");
bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
//jrb2.setSelected(true);jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();jlb1=new JLabel("用户名:");
jlb2=new JLabel("密码:");
jlb3=new JLabel("权限:");jtf=new JTextField(10);
jpf=new JPasswordField(10);
//加入到JPanel中
jp1.add(jlb1);
jp1.add(jtf);jp2.add(jlb2);
jp2.add(jpf);jp3.add(jlb3);
jp3.add(jrb1);
jp3.add(jrb2);jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);//加入JFrame中
this.setJMenuBar(jmb);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
//设置布局管理器
this.setLayout(new GridLayout(4,1));
//给窗口设置标题
this.setTitle("学生成绩管理系统");
//设置窗体大小
this.setSize(300,250);
//设置窗体初始位置
this.setLocation(200, 150);
//设置当关闭窗口时,保证JVM也退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
this.setResizable(true);}
@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="退出")
{
System.exit(0);
}else if(e.getActionCommand()=="登录")
{
//当点击登录按钮时,首先与数据库建立连接
GetSQL.ConnectSQL();
//如果选中教师登录
if(jrb1.isSelected())
{
GetSQL.sqlquery("教师");
//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
this.tealogin();
}else if(jrb2.isSelected()) //学生在登录系统
{
GetSQL.sqlquery("学生");
//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
this.stulogin();
}}else if(e.getActionCommand()=="重置")
{
this.clear();
}}//清空文本框和密码框
publicvoid clear()
{
jtf.setText("");
jpf.setText("");
}
//学生登录判断方法
public void stulogin()
{
if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
//关闭当前界面
dispose();
//创建一个新界面
Stu_UI ui=new Stu_UI();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
this.clear();
}
}//教师登录判断方法
public void tealogin()
{
if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
//关闭当前界面
dispose();
//创建一个新界面,适用于教师来管理学生
Teacher t=new Teacher();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
this.clear();
}
}}

SQL.java 负责与数据库建立连接,包括俩方法。一个是连接数据库方法,一个是查询方法。可进一步扩展。

package com.package_5;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;//写一个类,用来与数据库建立连接,并且查询数据
class GetSQL
{
//设定用户名和密码
static String userword;
static String pwd;static Connection ct=null;
static PreparedStatement ps=null;
static ResultSet rs=null;//用于连接数据库的方法,可用于子类的继承
public static void ConnectSQL()
{
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
ct=DriverManager.getConnection("jdbc:odbc:ywq");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
//用于向数据库进行查询的方法
public static void sqlquery(String s)
{
//创建火箭车
try {
ps=ct.prepareStatement("select * from info where 权限=? ");
//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, s);
//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs=ps.executeQuery();
//循环取出
while(rs.next()){
//将教师的用户名和密码取出
userword=rs.getString(2);
pwd=rs.getString(3);
System.out.println("成功获取到密码和用户名from数据库");
System.out.println(userword+"/t"+pwd+"/t");
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

Stu_UI.java 学生登录成功后跳转的界面

package com.package_5;import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class Stu_UI extends JFrame implements ActionListener
{ //定义组件
JButton jb1,jb2=null;
JPanel jp1,jp2,jp3=null;
JLabel jlb1,jlb2,jlb3,jlb4=null;//public static void main(String[] args) {
//// TODO Auto-generated method stub
//Stu_UIui=new Stu_UI();
//}
//构造函数
publicStu_UI()//不能申明为void!!!!!否则弹不出新界面
{
//创建组件
jb1=new JButton("课程管理");
jb2=new JButton("成绩查询");jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();jlb1=new JLabel("姓名");
jlb2=new JLabel("学号");
jlb3=new JLabel("最新公告:");
jlb4=new JLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);
jp1.add(jlb2);jp2.add(jb1);
jp2.add(jlb3);jp3.add(jb2);
jp3.add(jlb4);
this.add(jp1);
this.add(jp2);
this.add(jp3);//设置布局管理器
this.setLayout(new GridLayout(3,3,50,50));
this.setTitle("学生成绩管理系统");
this.setSize(400,300);
this.setLocation(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub}
}

Teacher.java 教师登录成功后跳转的界面。package com.package_5;import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class Teacher extends JFrame implements ActionListener{//定义组件
JLabel jl2=null;
JTextField jtf=null;
JButton jb=null;
JPanel jp1,jp2=null;
JTable jtable=null;String name=null;
String num=null;static Connection ct=null;
PreparedStatement ps=null;
ResultSet rs=null;//public static void main(String[] args) {
//// TODO Auto-generated method stub
//Teacher t=new Teacher();
//
//try {
//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//ct=DriverManager.getConnection("jdbc:odbc:ywq");
//} catch (Exception e) {
//
//e.printStackTrace();
//}
//
//}
//构造函数
public Teacher()
{
//创建组件
jl2=new JLabel("请输入学号:");
jtf=new JTextField(10);
jb=new JButton("查询");
//设置监听
jb.addActionListener(this);
//设置表格
final Object[] columnNames = {"姓名","学号"};
Object[][] rowData = {
{"小明","2015110512"},
{"小","2015110"},
{"小红","2015110511"}
};
jtable=new JTable(rowData, columnNames);jp1=new JPanel();
jp2=new JPanel();jp1.add(jl2);
jp1.add(jtf);
jp1.add(jb);
jp2.add(jtable);this.add(jp1);
this.add(jp2);this.setLayout(new GridLayout(2,3));
this.setTitle("学生成绩管理系统—教师");
this.setSize(500,400);
this.setLocation(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="查询")
{
//JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
//创建火箭车
try {
ps=ct.prepareStatement("select * from info where xuehao=? ");
//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, jtf.getText());
//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs=ps.executeQuery();
//循环取出
if(rs.next())
{
name=rs.getString(5);
System.out.println("查询成功from数据库");
System.out.println(name+"/t");
JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
System.out.println("查询失败");
JOptionPane.showMessageDialog(null,"查询失败!","提示消息",JOptionPane.WARNING_MESSAGE);
}
//while(rs.next()){
////将教师的用户名和密码取出
//// num=rs.getString(4);
// name=rs.getString(5);
//System.out.println("查询成功from数据库");
//System.out.println(name+"/t");
//}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}}
}

步骤5:优化数据库验证条件,使用不同的表来进行查询。

教师界面增加查询功能。

代码如下:Login6.java

/*
* 功能:学生成绩管理系统
* 步骤1、登录界面的静态实现
* 步骤2:实现界面的切换
* 步骤3:使用数据库来验证用户名和密码
* 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
* 步骤5:优化代码,增加判断条件。
* 步骤6:使用数据库进行查询时,优化查询方法和判断条件。数据库的表中可有多个数据。引入不同的表来查询。
* 步骤7:教师界面实现了查询某个学生信息和某教师信息的功能。
* author:ywq
*/
package com.package_7;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;public class Login6 extends JFrame implements ActionListener {//定义登录界面的组件
JButton jb1,jb2,jb3=null;
JRadioButton jrb1,jrb2=null;
JPanel jp1,jp2,jp3,jp4=null;
JTextField jtf=null;
JLabel jlb1,jlb2,jlb3=null;
JPasswordField jpf=null;
ButtonGroup bg=null;//菜单项
JMenuBar jmb=null;
JMenu jm=null;
JMenuItem jmi1,jmi2=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Login6ms=new Login6();
}
//构造函数
public Login6()
{
//创建组件
jb1=new JButton("登录");
jb2=new JButton("重置");
jb3=new JButton("退出");
//设置监听
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);jmb=new JMenuBar(); //JMenuBar指菜单栏
jm=new JMenu("选项"); //JMenu是菜单栏中的选项栏
jmi1=new JMenuItem("开始"); //JMenuItem指选项栏中的选项
jmi2=new JMenuItem("退出系统");
jm.add(jmi1);
jm.add(jmi2);
jmb.add(jm);
jrb1=new JRadioButton("教师",true);
jrb2=new JRadioButton("学生");
bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
//jrb2.setSelected(true);jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();jlb1=new JLabel("用户名:");
jlb2=new JLabel("密码:");
jlb3=new JLabel("权限:");jtf=new JTextField(10);
jpf=new JPasswordField(10);
//加入到JPanel中
jp1.add(jlb1);
jp1.add(jtf);jp2.add(jlb2);
jp2.add(jpf);jp3.add(jlb3);
jp3.add(jrb1);
jp3.add(jrb2);jp4.add(jb1);
jp4.add(jb2);
jp4.add(jb3);//加入JFrame中
this.setJMenuBar(jmb);
this.add(jp1);
this.add(jp2);
this.add(jp3);
this.add(jp4);
//设置布局管理器
this.setLayout(new GridLayout(4,1));
//给窗口设置标题
this.setTitle("学生成绩管理系统");
//设置窗体大小
this.setSize(300,250);
//设置窗体初始位置
this.setLocation(200, 150);
//设置当关闭窗口时,保证JVM也退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//显示窗体
this.setVisible(true);
this.setResizable(true);}
@Override
public void actionPerformed(ActionEvent e) {if(e.getActionCommand()=="退出")
{
System.exit(0);
}else if(e.getActionCommand()=="登录")
{
if(!jtf.getText().isEmpty() && !jpf.getText().isEmpty())
{
//当点击登录按钮时,首先与数据库建立连接
GetSQL.ConnectSQL();
//如果选中教师登录
if(jrb1.isSelected())
{
GetSQL.querytea("教师",jtf.getText());
//首先判断是否存在该用户,即是否得到了密码
if(GetSQL.pwd ==null)
{
this.clear();
}else
{
//调用登录方法
this.tealogin();
}
}else if(jrb2.isSelected()) //学生在登录系统
{
GetSQL.querystu("学生",jtf.getText());
//首先判断是否存在该用户,即是否得到了密码
if(GetSQL.pwd ==null)
{
this.clear();
}else
{
//调用登录方法
this.stulogin();
}}
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
}
}else if(e.getActionCommand()=="重置")
{
this.clear();
}}//清空文本框和密码框
publicvoid clear()
{
jtf.setText("");
jpf.setText("");
}
//学生登录判断方法
public void stulogin()
{
if(GetSQL.pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
//关闭当前界面
dispose();
//创建一个新界面
Stu_UI6 ui=new Stu_UI6();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
this.clear();
}
}//教师登录判断方法
public void tealogin()
{
if(GetSQL.pwd.equals(jpf.getText()))
{
//System.out.println("登录成功");
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
this.clear();
//关闭当前界面
dispose();
//创建一个新界面,适用于教师来管理学生
Teacher6 t=new Teacher6();
}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jtf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(jpf.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!/n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
//清空输入框
this.clear();
}
}}


SQL.java

/*
* 功能:用来和数据库SQLserver进行连接,以及相应的查询方法。
*/
package com.package_7;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;import javax.swing.JOptionPane;//写一个类,用来与数据库建立连接,并且查询数据
class GetSQL {
// 设定用户名和密码
static String userword;
static String pwd;static String english;
static String num;
static String name;
static String chinese;
static String zhengzhi;
static String math;static String age;
static String salary;
static String sex;
static String zhicheng;
static String teanum;
static String teaname;static Connection ct = null;
static PreparedStatement ps = null;
static ResultSet rs = null;// 用于连接数据库的方法,可用于子类的继承
public static void ConnectSQL() {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
ct = DriverManager.getConnection("jdbc:odbc:ywq");
System.out.println("The SQL is connected");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}// 用于向数据库进行查询的方法
public static void querystu(String s,String username) {
// 创建火箭车
try {
ps = ct.prepareStatement("select * from info where 权限=? and 用户名=? ");
// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, s);
ps.setString(2, username);
// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs = ps.executeQuery();
// 循环取出
if (rs.next()) {
// 将教师的用户名和密码取出
userword = rs.getString(2);
pwd = rs.getString(3);
System.out.println("成功获取到密码和用户名from数据库");
System.out.println(userword + "/t" + pwd + "/t");
}else
{
JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//在教师表中进行查询
public static void querytea(String s,String name ) {
// 创建火箭车
try {
ps = ct.prepareStatement("select * from info_tea where 权限=? and 用户名=? ");
// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, s);
ps.setString(2, name);
// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs = ps.executeQuery();
// 循环取出
if (rs.next()) {
// 将教师的用户名和密码取出
userword = rs.getString(2);
pwd = rs.getString(3);
System.out.println("成功获取到密码和用户名from数据库");
System.out.println(userword + "/t" + pwd + "/t");
}else
{
JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}//从数据库中根据学号或者教工号来查询数据,并且填入表格。
public static void getdatastu(String s) {
// 创建火箭车
try {
ps = ct.prepareStatement("select * from info where 学号 =? ");
// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, s);
// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs = ps.executeQuery();
if(rs.next())
{
// 将教师的用户名和密码取出
num = rs.getString(4);
name = rs.getString(5);
math = rs.getString(6);
chinese = rs.getString(7);
english = rs.getString(8);
zhengzhi = rs.getString(9);
}else
{
JOptionPane.showMessageDialog(null, "没有此学生,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
}} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
public static void getdatatea(String s) {
// 创建火箭车
try {
ps = ct.prepareStatement("select * from info_tea where 教师编号号 =? ");
// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
ps.setString(1, s);
// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
rs = ps.executeQuery();
if(rs.next())
{
// 将教师的用户名和密码取出
teanum = rs.getString(4);
teaname = rs.getString(5);
sex = rs.getString(6);
salary = rs.getString(7);
zhicheng = rs.getString(8);
age = rs.getString(9);
}else
{
JOptionPane.showMessageDialog(null, "没有此教师,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
}} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}}
Stu_UI6.java/*
* 功能:学生登录成功界面。
*
*/
package com.package_7;import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class Stu_UI6 extends JFrame implements ActionListener
{ //定义组件
JButton jb1,jb2=null;
JPanel jp1,jp2,jp3=null;
JLabel jlb1,jlb2,jlb3,jlb4=null;//public static void main(String[] args) {
//// TODO Auto-generated method stub
//Stu_UI6ui=new Stu_UI6();
//}
//构造函数
publicStu_UI6()//不能申明为void!!!!!否则弹不出新界面
{
//创建组件
jb1=new JButton("课程管理");
jb2=new JButton("成绩查询");jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();jlb1=new JLabel("姓名");
jlb2=new JLabel("学号");
jlb3=new JLabel("最新公告:");
jlb4=new JLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);
jp1.add(jlb2);jp2.add(jb1);
jp2.add(jlb3);jp3.add(jb2);
jp3.add(jlb4);
this.add(jp1);
this.add(jp2);
this.add(jp3);//设置布局管理器
this.setLayout(new GridLayout(3,3,50,50));
this.setTitle("学生成绩管理系统");
this.setSize(400,300);
this.setLocation(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub}
}


Teacher.java/*
* 功能:实现了查询学生和老师的信息,并且显示在表格中的功能。
*/package com.package_7;import javax.swing.*;
import javax.swing.table.DefaultTableModel;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class Teacher6 extends JFrame implements ActionListener {// 定义组件
JLabel jl2,jl,jl3,jl4 = null;
JTextField jtf,jtf2 = null;
JButton jb,jb2 = null;
JPanel jp1, jp2,jp3,jp4,jp5,jp6 = null;DefaultTableModel model,model2 = null;
JTable table,table2 = null;
JScrollPane jsp,jsp2 = null;//public static void main(String[] args) {
// TODO Auto-generated method stub
//Teacher6 t = new Teacher6();
//}// 构造函数
public Teacher6() {
// 创建组件
jl = new JLabel("请输入学号:");
jl2=new JLabel("请输入教工号:");jl3=new JLabel("学生信息表:");
jl4=new JLabel("教师信息表:");jtf = new JTextField(10);
jtf2 = new JTextField(10);
jb = new JButton("查询1");
jb2 = new JButton("查询2");
// 设置监听
jb.addActionListener(this);
jb2.addActionListener(this);
// 设置表格1
String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };
model = new DefaultTableModel(colnames, 3);
table = new JTable(model);
jsp = new JScrollPane(table);
//设置表格2
String[] col = { "姓名", "教工号", "性别", "工资", "职称", "年龄" };
model2 = new DefaultTableModel(col, 3);
table2 = new JTable(model2);
jsp2 = new JScrollPane(table2);
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp4 = new JPanel();
jp5 = new JPanel();
jp6 = new JPanel();
jp5.setLayout(new BorderLayout());
jp6.setLayout(new BorderLayout());jp1.add(jl);
jp1.add(jtf);
jp1.add(jb);
jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
jp1.setPreferredSize(new Dimension(20,20));jp3.add(jl2);
jp3.add(jtf2);
jp3.add(jb2);
jp3.setLayout(new FlowLayout(FlowLayout.LEFT));jp2.add(jsp);
jp4.add(jsp2);jp5.add(jl3,BorderLayout.SOUTH);
jp6.add(jl4,BorderLayout.SOUTH);this.add(jp1);
this.add(jp5);
this.add(jp2);
this.add(jp3);
this.add(jp6);
this.add(jp4);this.setLayout(new GridLayout(6, 1));
this.setTitle("学生成绩管理系统—教师");
this.setSize(500, 500);
this.setLocation(150, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setResizable(false);
}@Override
public void actionPerformed(ActionEvent e) {if (e.getActionCommand().equals("查询1")&&!jtf.getText().isEmpty()) {
// 当点击查询按钮1时,首先与数据库建立连接
GetSQL.ConnectSQL();
GetSQL.getdatastu(jtf.getText());
jtf.setText("");
//System.out.println(GetSQL.english);
//System.out.println(GetSQL.chinese);
// 将数据填入表格
table.setValueAt(GetSQL.name, 0, 0);
table.setValueAt(GetSQL.num, 0, 1);
table.setValueAt(GetSQL.math, 0, 2);
table.setValueAt(GetSQL.chinese, 0, 3);
table.setValueAt(GetSQL.english, 0, 4);
table.setValueAt(GetSQL.zhengzhi, 0, 5);}else if (e.getActionCommand().equals("查询2")&&!jtf2.getText().isEmpty())
{
// 当点击查询按钮1时,首先与数据库建立连接
GetSQL.ConnectSQL();
GetSQL.getdatatea(jtf2.getText());
jtf2.setText("");// 将数据填入表格
table2.setValueAt(GetSQL.teaname, 0, 0);
table2.setValueAt(GetSQL.teanum, 0, 1);
table2.setValueAt(GetSQL.sex, 0, 2);
table2.setValueAt(GetSQL.salary, 0, 3);
table2.setValueAt(GetSQL.zhicheng, 0, 4);
table2.setValueAt(GetSQL.age, 0, 5);
}else
{
JOptionPane.showMessageDialog(null , "请输入要查询的编号","提示消息",JOptionPane.WARNING_MESSAGE);
}}
}

其中,数据库数据如图所示:


在前面的数据库查询中,使用了

ps=ct.prepareStatement("select * from info where 权限=? ");

这条语句,是依次将数据库中的权限“学生”或者"教师"的数据全部取出来,进行判断时,会产生错误。因为其将最后一个数据复制给了username和password。

改进方法:

ps = ct.prepareStatement("select * from info where 权限=? and 用户名=? ");

此条语句按照jtf.getText()来进行查询,如果查到此用户名则判断密码是否正确。否则将弹出“用户名不存在的提示”,较好的解决了查询问题。

如图所示:

教师登录成功界面,如图:


在此系统中,可以对数据库中学生表和教师表中的信息进行查询,按照提示,可输入学号和教工号来实现。

如图所示:


说说经验之谈,在构建表格的时候,列名怎么也不出现。

查阅资料后发现,只有将JTable加入到JScrollPane中才会显示列名。代码如下:

// 设置表格1
String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };

model = new DefaultTableModel(colnames, 3);

table = new JTable(model);

jsp = new JScrollPane(table);

然后将JScrollPane添加进一个JPanel中,实现了表格的设置。

至于点击查询按钮所进行的查询工作就和前面大同小异了。当输入的学号或者教工号不存在时,会给出一个提示。如图所示:





简易信息管理系统适合新手学Java图形界面开发。

1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。

2、使用了事件监听、Java操作SQLserver数据库等知识。

3、图形化界面中使用了JTable等组件,将查询结果显示在表格中。

其实,在这个简单的程序中,至少我可以看出可以使用单例模式和门面模式。

见:Java设计模式—门面模式(带案例分析)

Java图形界面开发—简易登录注册小程序


经过好久的努力,在图形化界面开发上,希望能够帮助更多正在学习图形界面开发的小伙伴~

如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群366533258交流讨论哈~


最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台