精华内容
参与话题
问答
  • Go语言图形界面开发:Go版GTK

    万次阅读 热门讨论 2018-02-08 21:17:27
  • Java Swing 图形界面开发(目录)

    万次阅读 多人点赞 2017-05-30 23:50:42
    Java Swing 图形界面(GUI)开发基础教程(目录)

    本文链接: https://blog.csdn.net/xietansheng/article/details/72814492

    0. JavaSwing 简介

    1. JavaSwing 布局管理器

    2. JavaSwing 基本组件

    3. JavaSwing 面板组件

    4. JavaSwing 其他组件

    5. JavaSwing 相关特性

    扩展:Java AWT/Swing 其他相关


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

    万次阅读 多人点赞 2016-03-19 19:52:28
    图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。 关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~ ...

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

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

    关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~

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

           该程序使用的数据库为SQL server,如果不太懂怎么使用java操作SQL server数据库的可以看看我的这篇博客,希望可以帮到大家。

    Java程序操作数据库SQLserver详解  

     

    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设计模式—门面模式(带案例分析)                    

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

     


     如果大家想直接使用本文中创建的模板,那么只需要将最后一步的各个Java文件copy出来即是一个完整的Java程序(当然你还需要一份数据库的建表sql文件),希望能够帮助更多正在学习图形界面开发的小伙伴~

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

     

    关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~

     

    展开全文
  • Java Swing 图形界面开发简介

    万次阅读 多人点赞 2017-05-30 23:52:47
    Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 Swing 开发中常用的一些组件、布局管理器等相关知识技术,并且每章节都将通过代码实例展示实际应用。...Java Swing 图形界面开发目录

    本文链接: http://blog.csdn.net/xietansheng/article/details/72814531

    Java Swing GUI 图形界面窗口开发基础教程,本教程将系统性地详细介绍 Java Swing 开发中常用的一些组件、布局管理器等相关知识技术,并且每章节都将通过代码实例展示实际应用。

    教程总目录: Java Swing 图形界面开发(目录)

    1. Swing简介

    Swing 是 Java 为图形界面应用开发提供的一组工具包,是 Java 基础类的一部分。

    Swing 包含了构建图形界面(GUI)的各种组件,如: 窗口、标签、按钮、文本框等。

    Swing 提供了许多比 AWT 更好的屏幕显示元素,使用纯 Java 实现,能够更好的兼容跨平台运行。

    为了和 AWT 组件区分,Swing 组件在javax.swing.*包下,类名均以 J 开头,例如: JFrame、JLabel、JButton等。

    2. Swing组件

    一个 Java 的图形界面,由各种不同类型的“元素”组成,例如: 窗口、菜单栏、对话框、标签、按钮、文本框等等,这些“元素”统一被称为 组件Component)。

    组件按照不同的功能,可分为 顶层容器中间容器基本组件。一个简单窗口的组成,如下层级结构所示:

    • 顶层容器
      • 菜单栏
      • 中间容器
        • 基本组件
        • 基本组件

    组件类型的继承关系:

    • 顶层容器 属于窗口类组件,继承自java.awt.Window
    • 中间容器 和 基本组件 继承自javax.swing.JComponent

    2.1 顶层容器

    顶层容器属于窗口类组件,可以独立显示,一个图形界面至少需要一个窗口,例如:

    # 组件 描述
    1 JFrame 一个普通的窗口(绝大多数 Swing 图形界面程序使用 JFrame 作为顶层容器)
    2 JDialog 对话框

    2.2 中间容器

    中间容器充当基本组件的载体,不可独立显示。中间容器可以添加若干基本组件(也可以嵌套添加中间容器),对容器内的组件进行管理,类似于给各种复杂的组件进行分组管理。最顶层的一个中间容器必须依托在顶层容器(窗口)内。

    常用的中间容器(面板):

    # 组件 描述
    1 JPanel 一般轻量级面板容器组件
    2 JScrollPane 带滚动条的,可以水平和垂直滚动的面板组件
    3 JSplitPane 分隔面板
    4 JTabbedPane 选项卡面板
    5 JLayeredPane 层级面板

    特殊的中间容器:

    # 组件 描述
    1 JMenuBar 菜单栏
    2 JToolBar 工具栏
    3 JPopupMenu 弹出菜单
    4 JInternalFrame 内部窗口

    2.3 基本组件

    基本组件是直接实现人机交互的组件。

    常用的简单的基本组件:

    # 组件 描述
    1 JLabel 标签
    2 JButton 按钮
    3 JRadioButton 单选按钮
    4 JCheckBox 复选框
    5 JToggleButton 开关按钮
    6 JTextField 文本框
    7 JPasswordField 密码框
    8 JTextArea 文本区域
    9 JComboBox 下拉列表框
    10 JList 列表
    11 JProgressBar 进度条
    12 JSlider 滑块

    选取器组件:

    # 组件 描述
    1 JFileChooser 文件选取器
    2 JColorChooser 颜色选取器

    其他较为复杂的基本组件:

    # 组件 描述
    1 JTable 表格
    2 JTree

    3. 布局管理器

    Swing 的各种组件(JComponent)添加到面板容器中(JPanel),需要给面板容器指定布局管理器(LayoutManager),明确容器(Container)内的各个组件之间的排列布局方式。

    常用的布局管理器:

    # 布局管理器 描述
    1 FlowLayout 流式布局,按组件加入的顺序,按水平方向排列,排满一行换下一行继续排列。
    2 GridLayout 网格布局,把Container按指定行列数分隔出若干网格,每一个网格按顺序放置一个控件。
    3 GridBagLayout 网格袋布局,按网格划分Container,每个组件可占用一个或多个网格,可将组件垂直、水平或沿它们的基线对齐。
    4 BoxLayout 箱式布局,将Container中的多个组件按 水平 或 垂直 的方式排列。
    5 GroupLayout 分组布局,将组件按层次分组(串行 或 并行),分别确定 组件组 在 水平 和 垂直 方向上的位置。
    6 CardLayout 卡片布局,将Container中的每个组件看作一张卡片,一次只能显示一张卡片,默认显示第一张卡片。
    7 BorderLayout 边界布局,把Container按方位分为 5 个区域(东、西、南、北、中),每个区域放置一个组件。
    8 SpringLayout 弹性布局,通过定义组件四条边的坐标位置来实现布局。
    9 null 绝对布局,通过设置组件在Container中的坐标位置来放置组件。

    4. 代码实例: 一个简单的窗口程序

    package com.xiets.swing;
    
    import javax.swing.*;
    
    public class Main {
    
        public static void main(String[] args) {
            // 1. 创建一个顶层容器(窗口)
            JFrame jf = new JFrame("测试窗口");          // 创建窗口
            jf.setSize(250, 250);                       // 设置窗口大小
            jf.setLocationRelativeTo(null);             // 把窗口位置设置到屏幕中心
            jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); // 当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)
    
            // 2. 创建中间容器(面板容器)
            JPanel panel = new JPanel();                // 创建面板容器,使用默认的布局管理器
    
            // 3. 创建一个基本组件(按钮),并添加到 面板容器 中
            JButton btn = new JButton("测试按钮");
            panel.add(btn);
    
            // 4. 把 面板容器 作为窗口的内容面板 设置到 窗口
            jf.setContentPane(panel);
    
            // 5. 显示窗口,前面创建的信息都在内存中,通过 jf.setVisible(true) 把内存中的窗口显示在屏幕上。
            jf.setVisible(true);
        }
    
    }
    

    结果展示:

    result.png


    展开全文
  • Java Swing是目前图形界面设计的主流开发工具,《Java Swing图形界面开发与案例详解[1]》从实用的角度出发,通过大量实例全面介绍Java Swing中各种组件的应用及图形界面的开发技术。《Java Swing图形界面开发与案例...
  • android图形界面开发

    2017-11-14 15:55:30
    一个简单的app图形界面优美,可以先在PC上解压看看看,如果里面有*.sis后缀的软件,就解开,把SIS文件发送到手机上安装,如果解压开,里面有“mete-INF”这个文件夹还有一大堆别的文件,就是Java的软件,一般JAR格式...
  • 基于数据驱动方法的图形界面开发方案以界面控件为对象,使用图形界面配置数据描述功能逻辑,通过图形界面配置数据的变动驱使系统的运行,实现功能逻辑。实现了图形界面配置数据和功能逻辑的分离,当需求发生变动时,...
  • Java Swing图形界面开发与案例详解

    热门讨论 2015-02-21 05:28:29
    java swing是目前图形界面设计的主流开发工具 本书从实用角度出发 通过大量实例介绍各种组件及图形界面开发技术 几乎涵盖了图形开发必备的所有常用知识 丰富的实例 且实例均来自于工程实践 适合初学者阅读 也可供...
  • 嵌入式Linux图形界面开发徐 蓉《嵌入式Linux图形界面开发
  • java图形界面开发插件

    2012-10-22 19:22:27
    eclipse图形界面awt、swing辅助开发插件,解压到eclipse安装目录的plugins文件夹中即可
  • C语言之图形界面开发(GTK)

    千次阅读 2019-06-04 13:34:39
    这是我用C语言写的通讯录图形界面版的,用到了数据库和GTK。特此供大家参考,欢迎大家指正!!! 源代码
  • Java图形界面开发—学生信息管理系统 完整源码

    千次下载 热门讨论 2017-02-28 21:36:13
    学生信息管理系统,使用Java开发。 1、登录界面可以进行登录操作。...3、图形界面中使用了JTable等组件,将查询结果显示在表格中。 详见我的博客:http://blog.csdn.net/qq_25827845/article/details/50932501
  • python 图形界面开发

    万次阅读 2017-07-27 10:27:45
    用python来开发图形界面,确实不是很方便,没有c#,Java,甚至VB来得容易。几个控件拖拽,然后响应事件。用python写脚本,或者web service来处理一般工作,绰绰有余。
  • Qt 是一个 1991 年由奇趣科技开发的跨平台 C++图形用户界面应用程序开发框架。它 既可以开发 GUI 程序,也可用于开发非 GUI 程序,比如控制台工具和服务器。Qt 是面向 对象的框架,使用特殊的代码生成扩展(称为元...
  • 《Java Swing图形界面开发与案例详解》几乎涵盖了目前Java Swing图形开发必备的所有常用知识,拥有丰富的实例,且这些实例均来自于工程实践,《Java Swing图形界面开发与案例详解》适合Java程序语言的初学者阅读,也...
  • python图形界面开发

    千次阅读 2019-06-10 22:03:41
    python图形界面开发 #python import tkinter import tkinter.messagebox def main(): flag = True def change_label_text(): nonlocal flag flag = not flag color, msg = ('red', 'hel...
  • Java Swing 图形界面开发总结(完整版)

    万次阅读 多人点赞 2019-03-19 20:26:16
    最近在学习Java图像处理,发现还有好多不清除的知识点,在CSDN上查了好久,找到一篇前辈整理的关于Java Swing 图形界面开发的文章,感觉对自己的帮助非常大,在这里转载推荐一下,和大家一起学习,希望能对大家有所...
  • Java图形界面开发—简易记事本

    千次阅读 多人点赞 2016-05-18 20:41:38
    简易记事本小练习
  • Java Swing图形界面开发与案例详解全书的随书光盘源代码,是相当不错的Swing图形设计学习资料,一共包括了19章的代码,配合《Java Swing图形界面开发与案例详解》一书学习,效果更好。实例中的大部分代码都有详细...
  • 在myeclipse10里面如何将原有的java代码转变成可以更改的图形界面,这样可以拉动图形组件,方便修改图形界面。也就说想打开成form形式,不会啊?请教大神 (我现在有java代码,运行时显示图形界面,但想进一步修改...
  • linux图形界面开发

    千次阅读 2018-08-03 23:14:19
    chrome用的是skia图形库 firefox用的是cairo图形库 在linux下,skia和cairo都是以gtk为前端(就和wxwidgets类似),并不是直接用gtk开发的 skype是qt开发的,商业软件用qt开发的不少 eclipse是用java下的swt开发的,...
  • Java图形界面开发利器WindowBuilder

    千次阅读 2019-05-24 15:18:06
    在Eclipse中使用AWT、Swing做UI开发是件挺苦恼的事儿。不过,我们可以借助Eclipse的插件WindowBuilder极大地简化我们的工作。
  • Java图形界面开发

    千次阅读 2007-04-09 17:58:00
    Java图形界面开发 从Java诞生至今,已经在太多的领域取得成功,然而它却很少在图形界面程序上崭露头角。究其原因,Java语言缺省的图形界面开发包AWT和SWING实在是难脱其究,无论速度
  • c语言图形界面开发

    2013-01-21 13:26:26
    小弟学了阵c语言,现在想用c语言写点图形界面的程序。上网也问了,有MFC,GTK+,QT,Windows Forms,WTL,wxWigets等等。现在无从下手,有哪位大侠帮小的分析一下它们之间的区别。

空空如也

1 2 3 4 5 ... 20
收藏数 13,840
精华内容 5,536
关键字:

图形界面开发