(尊重劳动成果,转载请注明出处: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);//加入到JFramethis.add(jp1);this.add(jp2);this.add(jp3);//设置窗体this.setTitle("用户登录");//窗体标签this.setSize(300, 150);//窗体大小this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFramethis.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 stubLogin  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);}@Overridepublic 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 stublogin  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);}@Overridepublic 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 blocke1.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 blocke1.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);}@Overridepublic 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 stubLogin  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);}@Overridepublic 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 blocke.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 blocke1.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);}@Overridepublic 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);}@Overridepublic 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 blocke1.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 stubLogin6  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);}@Overridepublic 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 blocke.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 blocke1.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 blocke1.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 blocke1.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 blocke1.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);}@Overridepublic 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);// 设置表格1String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };model = new DefaultTableModel(colnames, 3);table = new JTable(model);jsp = new JScrollPane(table);//设置表格2String[] 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);}@Overridepublic 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 图形界面开发--图文并茂建立学生管理系统相关推荐

  1. Java图形界面开发利器WindowBuilder

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

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

    登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...

  3. java图形界面开发——简易图书管理系统

    简易图书管理系统 刚开始学习java swing,做的第一个试验项目,代码的可读性不高,就是想记录一下下. 项目要求 创建图书管理系统登录窗体,且登录窗体不能最大化. 实现登录功能,规定用户名与密码为 ...

  4. Java实现简单的日历小程序之Java图形界面开发小日历

    首先创建一个CalendarBean类,用于基本的日期计算: package other1;import java.util.Calendar; public class CalendarBean { ...

  5. java实现记事本界面及基本功能,Java图形界面开发之简易记事本

    在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: 运行结果如 ...

  6. java swing图形界面开发 java.swing简介

    最近在看YouTube上面的视频的时候,虽然学着做了一点界面和一点可以运行的东西,但是里面用到的库文件我还是不明就里的.所以我打算在制作游戏之前,先花几天的时间大概地研究一下关于java.swing的 ...

  7. java swing 案例详解_《Java Swing图形界面开发与案例详解》PDF_IT教程网

    资源名称:<Java Swing图形界面开发与案例详解>PDF 内容简介: <Java Swing图形界面开发与案例详解>全书共20章,其中第1-2章主要介绍有关Swing的基 ...

  8. java swing图形界面开发设计器windowbuilder安装步骤详解

    前言 WindowBuilder 是java swing的一款图形界面开发设计器,他可以大大增加开发项目的速度,对于eclipse这款开发工具,他是没有提供windowbuilder设计器的,如果要使 ...

  9. java图形界面详解_JAVA 图形界面开发基础详解

    与C的win32一样,JAVA也有自己的图形界面开发,将在此篇博客中对基础部分进行讲解. 1.Java提供的图形界面类有哪些? Java提供了两套图形界面 (1)AWT组建(基础) AWT组件是jdk ...

  10. java swing 目录,java swing图形界面开发目录

    java swing图形界面开发目录,做swing图形开发要学习哪些知识,难不难呢?请看以下的目录你就知道要学习哪些了: 目录 第1章 Java Swing概述 1 1.1 什么是Java Swing ...

最新文章

  1. 四级计算机基础知识,全国计算机等级考试四级通关攻略
  2. boost::contract模块实现是否constexpr的测试程序
  3. VTK:Rendering之PhysicalBasedRendering
  4. json 和 table控件
  5. php中td的属性设置,html table表格是什么?table标签中各种属性的使用方法
  6. C++中图像处理的类之二 CImg
  7. 好吧,如果一定要RESTFUL的DJANGO
  8. python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
  9. Spring MVC - 介绍
  10. 打谱软件-Avid Sibelius 8.5.0 macOS
  11. 微信小程序开发:微信小程序里面集成百度地图的步骤
  12. 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
  13. 2022机器学习好网站大收藏
  14. QQ号被盗有什么方法能找回
  15. TRIZ创新思维方法_简要复习
  16. 利用TPTP对Java程序进行性能测试
  17. 四个参数秒懂巴菲特价值投资
  18. 分治策略------棋盘覆盖(ChessBoard)
  19. sql trace 的几种方法
  20. 如何学习人工智能,学习AI的一般路线

热门文章

  1. 一台计算机可以安装网络打印机和本地打印机,您在计算机上安装一台本地打印机。您共享这台打印机。您需要确保只有名为Grou - 问答库...
  2. python pip是什么的简写,python pip是什么
  3. APP自动化测试-3. Appium元素定位与等待
  4. matlab导入数据后画图_利用三维坐标matlab创建三维曲面
  5. 揭秘消费金融之反欺诈
  6. 我是SPI,我让框架更加优雅了!
  7. 331. 验证二叉树的前序序列化
  8. 王者荣耀android换ios,王者荣耀安卓转ios教程攻略
  9. 安卓和ios的ui设计区别_简析Android系统与ios系统界面设计区别
  10. react native Switch使用详解