2011年5月28日星期六
第七十讲 学生管理系统2
1.
package com.test1;
import javax.swing.*;
import java.awt.*;
import java.sql.*;
import java.util.*;
import java.awt.event.*;
public class Test3
extends JFrame
{
//定义一些控件
JPanel
jp1=null,jp2=null;
JLabel
jl1;
JButton
jb1,jb2,jb3,jb4;
JTable
jt;
JScrollPane
jsp;
JTextField
jtf;
Vector rowData,columnNames;
Connection
ct=null;
PreparedStatement ps=null;
ResultSet
rs=null;
public static void main(String[] args)
{
Test3 test3=new
Test3();
}
public Test3()
{
jb1=new JButton("查询");
jb2=new JButton("添加");
jb3=new JButton("修改");
jb4=new JButton("删除");
jl1=new JLabel("请输入姓名");
jtf=new JTextField(10);
jp1=new JPanel();
jp2=new JPanel();
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
columnNames=new Vector();
//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");
rowData=new Vector();
try {
//加载驱动
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
ct=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1","sa","sa");
ps=ct.prepareStatement("select * from stu");
rs=ps.executeQuery();
while(rs.next())
{
Vector hang=new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
//加入到rowData
rowData.add(hang);
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(rs!=null) rs.close();
if(ps!=null) ps.close();
if(ct!=null) ct.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//初始化JTable
jt=new JTable(rowData,columnNames);
//初始化jsp JScrollPane
jsp=new JScrollPane(jt);
this.add(jp1,"North");//大小写不能瞎写啊
this.add(jp2,"South");//大小写不能瞎写啊
//把jsp放入到jframe
this.add(jsp);
this.setSize(400,300);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
}
}
2. MIS(管理信息系统——Management Information System)系统
,是一个由人、计算机及其他外围设备等组成的能进行信息的收集、传递、存贮、加工、维护和使用的系统。
3.TableModel
4.想办法把对表的操作封装成一个类
5. setModel(TableModel dataModel) :将此表的数据模型设置为
newModel,并向其注册以获取来自新数据模型的侦听器通知
6. jt=new JTable(sm);把模型放到JTable里面去
7.一行为一个向量Vector,然后再在rowData中加入很多的这些向量,就是有了很多行了
8.从向量里面取出来
//得到共有某行某列的数据
public Object getValueAt(int row, int column)
{
return
((Vector)this.rowData.get(row)).get(column);
}
发现表头没有数据,于是就在空白处右击选择source选择override/implements
methos选择getColumnName
public String getColumnName(int column)
{
return (String)(this.columnNames.get(column));
}
9.考虑多个构造函数
第七十一讲 学生管理系统3 增删版本
1.初步理解模式的概念(MV)
2.模式的概念
3.
if(e.getSource()==jb2)
{
StuAddDialog stuadddialog=new
StuAddDialog(this,"添加学生",true);//必须是模式对话框!!!
//添加完了以后要重新获得新的数据模型
sm=new StuModel();
jt.setModel(sm);//更新对话框,注意是重点!
}
分析:因为是true的话,那么只有用户点击才会退出JDialog,也才能执行下面的程序,而点击了以后,数据库就变更了,正好符合我们的要求;否则的话,在我们没有操作的时候就直接执行了下面的,显示的并没有更新,不错的设计!
4. JOptionPane.showMessageDialog(this, "请选择一行");//这个是弹出的对话框
第七十二讲 学生管理系统4 Model2模式
1.以上我们用的是model1模式(仅用于早期九几年):
最大特点:界面和和操作放在一起
优点:开发简单、方便
2.Model2模式:要达到界面和操作分离(一种程序的思想),将model1模式改成model2模式
优点:代码复用性好、可读性好、可维护性好
缺点:复杂性高