Java 图形界面开发--图文并茂建立学生管理系统
(尊重劳动成果,转载请注明出处: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 图形界面开发--图文并茂建立学生管理系统相关推荐
- Java图形界面开发利器WindowBuilder
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- Java图形界面开发—简易登录注册小程序
登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的地方,详见其它博客. Java程序操作数据库SQLserver详解 功能介绍:简单的登录注册系统,使用了数据库 ...
- java图形界面开发——简易图书管理系统
简易图书管理系统 刚开始学习java swing,做的第一个试验项目,代码的可读性不高,就是想记录一下下. 项目要求 创建图书管理系统登录窗体,且登录窗体不能最大化. 实现登录功能,规定用户名与密码为 ...
- Java实现简单的日历小程序之Java图形界面开发小日历
首先创建一个CalendarBean类,用于基本的日期计算: package other1;import java.util.Calendar; public class CalendarBean { ...
- java实现记事本界面及基本功能,Java图形界面开发之简易记事本
在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: 运行结果如 ...
- java swing图形界面开发 java.swing简介
最近在看YouTube上面的视频的时候,虽然学着做了一点界面和一点可以运行的东西,但是里面用到的库文件我还是不明就里的.所以我打算在制作游戏之前,先花几天的时间大概地研究一下关于java.swing的 ...
- java swing 案例详解_《Java Swing图形界面开发与案例详解》PDF_IT教程网
资源名称:<Java Swing图形界面开发与案例详解>PDF 内容简介: <Java Swing图形界面开发与案例详解>全书共20章,其中第1-2章主要介绍有关Swing的基 ...
- java swing图形界面开发设计器windowbuilder安装步骤详解
前言 WindowBuilder 是java swing的一款图形界面开发设计器,他可以大大增加开发项目的速度,对于eclipse这款开发工具,他是没有提供windowbuilder设计器的,如果要使 ...
- java图形界面详解_JAVA 图形界面开发基础详解
与C的win32一样,JAVA也有自己的图形界面开发,将在此篇博客中对基础部分进行讲解. 1.Java提供的图形界面类有哪些? Java提供了两套图形界面 (1)AWT组建(基础) AWT组件是jdk ...
- java swing 目录,java swing图形界面开发目录
java swing图形界面开发目录,做swing图形开发要学习哪些知识,难不难呢?请看以下的目录你就知道要学习哪些了: 目录 第1章 Java Swing概述 1 1.1 什么是Java Swing ...
最新文章
- 四级计算机基础知识,全国计算机等级考试四级通关攻略
- boost::contract模块实现是否constexpr的测试程序
- VTK:Rendering之PhysicalBasedRendering
- json 和 table控件
- php中td的属性设置,html table表格是什么?table标签中各种属性的使用方法
- C++中图像处理的类之二 CImg
- 好吧,如果一定要RESTFUL的DJANGO
- python处理时间的标准函数库_使用Python的datetime库处理时间(RPA流程)
- Spring MVC - 介绍
- 打谱软件-Avid Sibelius 8.5.0 macOS
- 微信小程序开发:微信小程序里面集成百度地图的步骤
- 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
- 2022机器学习好网站大收藏
- QQ号被盗有什么方法能找回
- TRIZ创新思维方法_简要复习
- 利用TPTP对Java程序进行性能测试
- 四个参数秒懂巴菲特价值投资
- 分治策略------棋盘覆盖(ChessBoard)
- sql trace 的几种方法
- 如何学习人工智能,学习AI的一般路线
热门文章
- 一台计算机可以安装网络打印机和本地打印机,您在计算机上安装一台本地打印机。您共享这台打印机。您需要确保只有名为Grou - 问答库...
- python pip是什么的简写,python pip是什么
- APP自动化测试-3. Appium元素定位与等待
- matlab导入数据后画图_利用三维坐标matlab创建三维曲面
- 揭秘消费金融之反欺诈
- 我是SPI,我让框架更加优雅了!
- 331. 验证二叉树的前序序列化
- 王者荣耀android换ios,王者荣耀安卓转ios教程攻略
- 安卓和ios的ui设计区别_简析Android系统与ios系统界面设计区别
- react native Switch使用详解