大家好,又见面了,我是你们的朋友全栈君。
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/50932501 冷血之心的博客)
图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。
关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~
这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统。虽然说不入大神法眼,但这确实是费了自己不少心血。对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调。在此分享出来希望对和我一样的菜鸟有帮助。
该程序使用的数据库为SQL server,如果不太懂怎么使用java操作SQL server数据库的可以看看我的这篇博客,希望可以帮到大家。
Java程序完整代码下载地址见:
http://download.csdn.net/detail/qq_25827845/9766699
步骤一:静态登录界面的实现。
代码如下:
/**
* 功能:学生成绩管理系统
* 步骤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
Login ms=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();
}
}
//清空文本框和密码框
public void 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
login ms=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();
}
}
//清空文本框和密码框
public void 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
// UI ui=new UI();
}
//构造函数
public 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
}
}
以上程序的执行结果如图所示:
步骤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
Login ms=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();
}
}
//清空文本框和密码框
public void 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_UI ui=new Stu_UI();
// }
//构造函数
public Stu_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
Login6 ms=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();
}
}
//清空文本框和密码框
public void 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_UI6 ui=new Stu_UI6();
// }
//构造函数
public Stu_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);
}
}
}
其中,数据库数据如图所示:
此处是分别建立了两张表,表结构更加复杂一点,博主在当时没有保存下来,后续补了一份sql文件,需要的可以加群366533258获取sql文件。2019.01.02
在前面的数据库查询中,使用了
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文件copy出来即是一个完整的Java程序(当然你还需要一份数据库的建表sql文件),希望能够帮助更多正在学习图形界面开发的小伙伴~
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群 366533258 交流讨论哈~
关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/151778.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...