上一章內容:
學習做學生管理系統——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);
}
}
});
}
}
其他功能有需要的可以自己模仿格式自己寫的,大致的成品就是這樣,如果學了網絡的功能,可以稍加修改後繼續使用,終章就這樣結束了