上一章内容:
学习做学生管理系统——java swing+Mysql 第三章(注册功能+优化代码)
这一章是终章,主要进行管理系统的主功能的实现。
本章只讲解:表格读取数据库,添加和删除。
看完这章,其他的功能基本可以相应的自己进行添加
先说从上一章过来的教学
当你做好登录界面后,怎么实现登录后进入管理界面。
dispose是用于关闭窗口的(登陆成功就可以关掉登录界面)
例子代码:
JFrame jf=new JFrame
Manage ma=new Manage();//新开一个manage类用于存放管理界面的运行代码,并引入到登录界面的类中
jf.dispose();//关闭登录界面,放到你觉得你需要的位置
ma.run();//紧跟关闭代码,界面关闭,就运行manage类的管理界面
接下来就是构建管理界面
我们新建一个类,我这里用manage类
正常程序,构建界面
public static void run() {
JFrame jf=new JFrame("学生管理系统");
jf.setSize(900, 700);
JPanel jp=new JPanel();//制作界面
jf.add(jp);
JButton add = new JButton("增加");
JButton del = new JButton("删除");
jp.add(add);
jp.add(del);
Mysql sql=new Mysql();//存放数据库帐号密码信息的类
第一步:表格读取数据库
在这里我们需要的是一个动态表格,可以随着数据的增加而变化行数的。
在构建表格时候,还要设定好这个表格跟数据库表的表字段名是一样的。
假设我们新建了一个学生信息表,有两个信息一个是id一个是名字
在代码中,我们先定义表格需要的行和列
//rowData用来存放行数据
//columnNames存放列名
static Vector rowData;
static Vector columnNames;
定义后,我们再在run()函数中紧跟界面代码后面添加列名,对应表的设置来创建
Vector不懂的,可以相应的百度
columnNames=new Vector();
columnNames.add("学号");
columnNames.add("姓名");
rowData = new Vector();
设置完后,给这个行列上点色,在这里如果是只读取固定表的就可以按照我的代码来上色,如果是想执行先选择表再读取,就不能按照我的代码,则需要先写读取功能再将读取的数据代入读取功能中
读取功能(就是一个简单的连接数据库读取表格)
Connection ct=null;
PreparedStatement ps=null;
try {
Class.forName(sql.JDBC_DRIVER);
ct=DriverManager.getConnection(sql.DB_URL,sql.USER,sql.PASS);
ps=ct.prepareStatement("select * from studentmanage.student"); //有读取功能需要的可以在这个选择语句上进行修改
ResultSet rs=ps.executeQuery();
while(rs.next()){
//rowData可以存放多行
Vector hang=new Vector();
for(int i=1;i<3;i++)
hang.add(rs.getString(i));
//加入到rowData
rowData.add(hang);
}
} catch (Exception e1) {
e1.printStackTrace();
System.exit(0);
}
做到这一步就是给行和列安排好读取的数据了,接下来就是将他呈现在管理界面上面
//初始化Jtable
JTable jt = new JTable(rowData,columnNames);//表格创建
DefaultTableModel tableModel = (DefaultTableModel) jt.getModel();//设置默认表格模版
//初始化 jsp
JScrollPane jsp = new JScrollPane(jt);//设置滚动面板
jp.add(jsp);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
代码正确就会是这样的
如果你关掉运行的程序,出现如下提示
这个没有事,不影响运行,只是会可能影响到你的一些代码的提示而已。想解决的可以百度一下,我是放着没管。
表格和按钮这些的位置,我是没有进行修改的,如有需要可以自己进行布局修改。
第二步:添加和删除
直接上代码
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableModel.addRow(new Vector());//增加
}
});
del.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// 删除指定行
int rowcount = jt.getSelectedRow();
if(rowcount >= 0){
tableModel.removeRow(rowcount);
}
}
});
很容易明白的功能代码了。
结尾
上个完整的代码
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;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Manage {
//rowData用来存放行数据
//columnNames存放列名
static Vector rowData;
static Vector columnNames;
public static void run() {
JFrame jf=new JFrame("学生管理系统");
jf.setSize(900, 700);
JPanel jp=new JPanel();//制作界面
jf.add(jp);
JButton add = new JButton("增加");
JButton del = new JButton("删除");
jp.add(add);
jp.add(del);
Mysql sql=new Mysql();
columnNames=new Vector();
columnNames.add("学号");
columnNames.add("姓名");
rowData = new Vector();
Connection ct=null;
PreparedStatement ps=null;
try {
Class.forName(sql.JDBC_DRIVER);
ct=DriverManager.getConnection(sql.DB_URL,sql.USER,sql.PASS);
ps=ct.prepareStatement("select * from studentmanage.student");
ResultSet rs=ps.executeQuery();
while(rs.next()){
//rowData可以存放多行
Vector hang=new Vector();
for(int i=1;i<3;i++)
hang.add(rs.getString(i));
//加入到rowData
rowData.add(hang);
}
} catch (Exception e1) {
e1.printStackTrace();
System.exit(0);
}
//初始化Jtable
JTable jt = new JTable(rowData,columnNames);
DefaultTableModel tableModel = (DefaultTableModel) jt.getModel();
//初始化 jsp
JScrollPane jsp = new JScrollPane(jt);
jp.add(jsp);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableModel.addRow(new Vector());//增加
}
});
del.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// 删除指定行
int rowcount = jt.getSelectedRow();
if(rowcount >= 0){
tableModel.removeRow(rowcount);
}
}
});
}
}
其他功能有需要的可以自己模仿格式自己写的,大致的成品就是这样,如果学了网络的功能,可以稍加修改后继续使用,终章就这样结束了