首页 > 代码库 > 学生信息管理系统JAVASE版--1.1.1

学生信息管理系统JAVASE版--1.1.1

现在终于可以写出实用一点的程序了。虽然这个程序的功能非常之简陋,而且还有BUG。不过最起码已经可以使用了。


功能预览和下一步的目标


程序主界面


查询功能:



目前只做了一个表的增、删、改、查。下一步应该就是把功能完善,比如加入错误处理,比如加入成绩部分。完成一个班级内的学生信息管理的功能,应该具有学生的基本信息查询,成绩管理这两个功能

不过有一个问题就是,在表格更新这一部分,每更新一次,就要创建一个tabliModel对象,感觉可以改进。再有就是MVC模式,其实也就接触设计模式。还有就是整成那种可执行文件。


程序代码


mysql建表语句


CREATE TABLE student(
stuId INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL DEFAULT ‘‘,
stuAge INT NOT NULL DEFAULT 0,
stuSex VARCHAR(5) NOT NULL DEFAULT ‘‘
)engine myisam charset utf8;

JAVA代码:

数据库部分

com.laolang.domain(数据对象,这里只有一个Student对象)

package com.laolang.domain;

/**
 * 学生对象,对应数据库中 student 表
 */
public class Student {

	/**
	 * Instantiates a new student.
	 */
	public Student() {
		super();
	}

	/**
	 * Instantiates a new student.
	 * 
	 * @param stuId
	 *            the stu id
	 * @param stuName
	 *            the stu name
	 * @param stuAge
	 *            the stu age
	 * @param stuSex
	 *            the stu sex
	 */
	public Student(int stuId, String stuName, int stuAge, String stuSex) {
		super();
		this.stuId = stuId;
		this.stuName = stuName;
		this.stuAge = stuAge;
		this.stuSex = stuSex;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "Student [stuId=" + stuId + ", stuName=" + stuName + ", stuAge="
				+ stuAge + ", stuSex=" + stuSex + "]";
	}

	/**
	 * Gets the stu id.
	 * 
	 * @return the stu id
	 */
	public int getStuId() {
		return stuId;
	}

	/**
	 * Sets the stu id.
	 * 
	 * @param stuId
	 *            the new stu id
	 */
	public void setStuId(int stuId) {
		this.stuId = stuId;
	}

	/**
	 * Gets the stu name.
	 * 
	 * @return the stu name
	 */
	public String getStuName() {
		return stuName;
	}

	/**
	 * Sets the stu name.
	 * 
	 * @param stuName
	 *            the new stu name
	 */
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}

	/**
	 * Gets the stu age.
	 * 
	 * @return the stu age
	 */
	public int getStuAge() {
		return stuAge;
	}

	/**
	 * Sets the stu age.
	 * 
	 * @param stuAge
	 *            the new stu age
	 */
	public void setStuAge(int stuAge) {
		this.stuAge = stuAge;
	}

	/**
	 * Gets the stu sex.
	 * 
	 * @return the stu sex
	 */
	public String getStuSex() {
		return stuSex;
	}

	/**
	 * Sets the stu sex.
	 * 
	 * @param stuSex
	 *            the new stu sex
	 */
	public void setStuSex(String stuSex) {
		this.stuSex = stuSex;
	}

	/** 学生编号 */
	private int stuId;

	/** 学生姓名 */
	private String stuName;

	/** 学生年龄 */
	private int stuAge;

	/** 学生性别 */
	private String stuSex;
}

com.laolang.db(数据库连接工具类,用的是属性文件的方式)

laolangDB(工具类)

package com.laolang.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;

/**
 * 数据库连接和关闭工具类
 */
public class laolangDB {

	/** 数据库连接地址 */
	private static String URL;

	/** 数据库用户名 */
	private static String USERNAME;

	/** 数据库密码 */
	private static String USERPASSWORD;

	/** mysql 驱动 */
	private static String DRIVER;

	/** The rb. */
	private static ResourceBundle rb = ResourceBundle
			.getBundle("com.laolang.db.db-config");

	/**
	 * 使用静态代码块加载驱动
	 */
	static {
		URL = rb.getString("jdbc.url");
		USERNAME = rb.getString("jdbc.username");
		USERPASSWORD = rb.getString("jdbc.userpassword");
		DRIVER = rb.getString("jdbc.driver");

		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 获得链接.
	 *
	 * @return the connection
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(URL, USERNAME, USERPASSWORD);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return conn;
	}

	/**
	 * 关闭链接.
	 *
	 * @param rs            the rs
	 * @param ps            the ps
	 * @param conn            the conn
	 */
	public static void closeConnection(ResultSet rs, Statement ps,
			Connection conn) {
		try {
			if (null != rs)
				rs.close();
			if (null != ps)
				ps.close();
			if (null != conn)
				conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

db-config.properties(数据文件):

jdbc.url=jdbc:mysql://localhost:3306/studentmanager1.1.1
jdbc.username=root
jdbc.userpassword=123456
jdbc.driver=com.mysql.jdbc.Driver


com.laolang.dao(数据库操作接口)

StudentDao

package com.laolang.dao;

import java.sql.SQLException;
import java.util.List;

import com.laolang.domain.Student;

/**
 * 数据库操作接口
 */
public interface StudentDao {

	/**
	 * 插入学生基本信息.
	 * 
	 * @param stu
	 *            学生对象
	 * @throws SQLException
	 *             the SQL exception
	 */
	public void insertStudent(Student stu) throws SQLException;

	/**
	 * 删除学生基本信息.
	 * 
	 * @param stuId
	 *            学生编号
	 * @throws SQLException
	 *             the SQL exception
	 */
	public void deleteStudent(int stuId) throws SQLException;

	/**
	 * 更新学生基本信息.
	 * 
	 * @param stu
	 *            学生对象
	 * @throws SQLException
	 *             the SQL exception
	 */
	public void updateStudent(Student stu) throws SQLException;

	/**
	 * S通过编号查询学生基本信息.
	 * 
	 * @param stuId
	 *            学生编号
	 * @return the student
	 * @throws SQLException
	 *             the SQL exception
	 */
	public Student selectStudentById(int stuId) throws SQLException;

	/**
	 * 查询所有学生基本信息.
	 * 
	 * @return the list
	 * @throws SQLException
	 *             the SQL exception
	 */
	public List<Student> selectStudentAll() throws SQLException;
}

com.laolang.dao.impl(数据库操作实现)

StudentDaoImpl

package com.laolang.dao.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.laolang.dao.StudentDao;
import com.laolang.db.laolangDB;
import com.laolang.domain.Student;

/**
 * 数据库操作实现
 */
public class StudentDaoImpl implements StudentDao {

	/** dbutils 工具类对象 */
	private QueryRunner runner;

	/**
	 * Instantiates a new student dao impl.
	 */
	public StudentDaoImpl() {
		runner = new QueryRunner();
	}

	/*
	 * 插入学生信息
	 * 
	 * @see com.laolang.dao.StudentDao#insertStudent(com.laolang.domain.Student)
	 */
	@Override
	public void insertStudent(Student stu) throws SQLException {
		String insertStudent = "insert into student( stuId, stuName, stuAge, stuSex ) values(?,?,?,?)";
		runner.update(laolangDB.getConnection(), insertStudent, stu.getStuId(),
				stu.getStuName(), stu.getStuAge(), stu.getStuSex());
	}

	/*
	 * 删除学生信息
	 * 
	 * @see com.laolang.dao.StudentDao#deleteStudent(int)
	 */
	@Override
	public void deleteStudent(int stuId) throws SQLException {
		String deleteStudentById = "delete from student where stuId = ?";
		runner.update(laolangDB.getConnection(), deleteStudentById, stuId);
	}

	/*
	 * 更新学生基本信息
	 * 
	 * @see com.laolang.dao.StudentDao#updateStudent(com.laolang.domain.Student)
	 */
	/*
	 * (non-Javadoc)
	 * 
	 * @see com.laolang.dao.StudentDao#updateStudent(com.laolang.domain.Student)
	 */
	@Override
	public void updateStudent(Student stu) throws SQLException {
		String updateStudent = "update student set stuName = ?, stuAge = ?, stuSex = ? where stuId = ?";
		runner.update(laolangDB.getConnection(), updateStudent,
				stu.getStuName(), stu.getStuAge(), stu.getStuSex(),
				stu.getStuId());
	}

	/*
	 * 通过编号查询学生基本信息
	 * 
	 * @see com.laolang.dao.StudentDao#selectStudentById(int)
	 */

	@Override
	public Student selectStudentById(int stuId) throws SQLException {
		Student stu = null;
		String selectStudentById = "select stuName, stuAge, stuSex from student where stuId = ?";
		stu = runner.query(laolangDB.getConnection(), selectStudentById,
				new BeanHandler<Student>(Student.class), stuId);
		stu.setStuId(stuId);

		return stu;
	}

	/*
	 * 查询所有学生基本信息
	 * 
	 * @see com.laolang.dao.StudentDao#selectStudentAll()
	 */

	@Override
	public List<Student> selectStudentAll() throws SQLException {
		String selectStudentAll = "select stuId, stuName, stuAge, stuSex from student";
		List<Student> studentList = runner.query(laolangDB.getConnection(),
				selectStudentAll, new BeanListHandler<Student>(Student.class));

		return studentList;
	}

}

界面部分:

com.laolang.ui(界面部分全部在这个包里)

ManagerMainWidnows.java(这是主界面,也是启动类)

package com.laolang.ui;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

import com.laolang.domain.Student;

// TODO: Auto-generated Javadoc
/**
 * 功能:学生信息管理系统主界面 版本:studentManager1.1.1 作者:小代码
 * 
 */
public class ManagerMainWindow extends JFrame implements ActionListener {
	/**
	 * The main method.
	 * 
	 * @param args
	 *            the arguments
	 */
	public static void main(String[] args) {
		ManagerMainWindow mmw = new ManagerMainWindow();
	}

	/**
	 * Instantiates a new manager main window.
	 */
	public ManagerMainWindow() {
		init();
		this.setActionCommand();

		this.setTitle("学生信息管理系统");
		this.setSize(400, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

	}

	/**
	 * 初始化窗体
	 */
	private void init() {
		// 创建组件
		this.lbId = new JLabel("待查学生编号");
		this.butInsert = new JButton("增加");
		this.butDelete = new JButton("删除");
		this.butUpdate = new JButton("修改");
		this.butSelect = new JButton("查询");
		this.butShowAll = new JButton("显示所有");
		this.tfId = new JTextField(10);
		this.jpNorth = new JPanel();
		this.jpSouth = new JPanel();
		this.stm = new StudentTableModel();
		stm.showAllData();
		this.jt = new JTable(stm);
		this.jsp = new JScrollPane(jt);

		// 将组件添加到面板
		jpNorth.add(lbId);
		jpNorth.add(tfId);
		jpNorth.add(butSelect);

		jpSouth.add(butInsert);
		jpSouth.add(butDelete);
		jpSouth.add(butUpdate);
		jpSouth.add(butShowAll);

		// 将面板添加到窗体
		this.add(jpNorth, BorderLayout.NORTH);
		this.add(jsp, BorderLayout.CENTER);
		this.add(jpSouth, BorderLayout.SOUTH);
	}

	/**
	 * Sets the action command.
	 */
	private void setActionCommand() {
		this.butInsert.addActionListener(this);
		this.butDelete.addActionListener(this);
		this.butUpdate.addActionListener(this);
		this.butSelect.addActionListener(this);
		this.butShowAll.addActionListener(this);

		this.butInsert.setActionCommand("insert");
		this.butDelete.setActionCommand("delete");
		this.butUpdate.setActionCommand("update");
		this.butSelect.setActionCommand("select");
		this.butShowAll.setActionCommand("show");
	}

	/*
	 * (non-Javadoc) 事件处理
	 * 
	 * @see
	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		// 如果用户点击添加
		if (e.getActionCommand().equals("insert")) {
			// System.out.println("insert");
			// 弹出添加对话框,并得到添加对话框中输入的值
			Student stu = new StudentInsertDialog(this, "添加学生信息", true)
					.getStu();
			// 如果没有点取消
			if (null != stu) {

				StudentTableModel stutm = new StudentTableModel();// 生成新的model

				stutm.insertStu(stu);// 执行插入

				jt.setModel(stutm);// 更新表格model
			}

		}
		// 如果点击删除
		else if (e.getActionCommand().equals("delete")) {
			// System.out.println("delete");
			// 得到用户选择的行的行号
			int delIndex = jt.getSelectedRow();
			// 如果没有选择任何行,则提醒选择一行
			if (-1 == delIndex) {
				JOptionPane.showMessageDialog(this, "请选择一行之后,再进行删除操作", "警告",
						JOptionPane.WARNING_MESSAGE);
			}
			if (-1 != delIndex) {

				String idStr = (String) stm.getValueAt(delIndex, 0);
				int id = Integer.valueOf(idStr).intValue();
				// System.out.println(id);

				StudentTableModel stuTm = new StudentTableModel();// 生成亲的model
				stuTm.deleteStu(id);// 执行删除

				jt.setModel(stuTm);// 更新表格model
			}

		}
		// 如果用户选择更新
		else if (e.getActionCommand().equals("update")) {
			// System.out.println("update");

			// 得到用户选择的行的行号
			int updataRowIndex = this.jt.getSelectedRow();
			// 如果没有选择任何行,则提醒选择一行
			if (-1 == updataRowIndex) {
				JOptionPane.showMessageDialog(this, "请选择一行之后,再进行修改操作", "警告",
						JOptionPane.WARNING_MESSAGE);
			}
			if (-1 != updataRowIndex) {
				Student stu = new Student();

				stu.setStuId(Integer.valueOf(
						(String) stm.getValueAt(updataRowIndex, 0)).intValue());
				stu.setStuName((String) stm.getValueAt(updataRowIndex, 1));
				stu.setStuAge(Integer.valueOf(
						(String) stm.getValueAt(updataRowIndex, 2)).intValue());
				stu.setStuSex((String) stm.getValueAt(updataRowIndex, 3));

				stu = new StudentUpdateDialog(this, "修改学生信息", true, stu)
						.getStu();
				// 如果修改了学生信息,则更新
				if (null != stu) {

					StudentTableModel stutm = new StudentTableModel();// 万籁新的model
					stutm.updateStu(stu);// 执行更新

					jt.setModel(stutm);// 更新表格model

					// System.out.println(stu.toString());
				}

			}

		}
		// 如果选择查询
		else if (e.getActionCommand().equals("select")) {
			// System.out.println("select");
			// 得到输入的学生编号
			int id = Integer.valueOf(tfId.getText()).intValue();

			StudentTableModel stutm = new StudentTableModel();// 生成新 model
			stutm.selectStuId(id);// 执行查询

			jt.setModel(stutm);// 更新表格model

		}
		// 如果选择显示所有
		else if (e.getActionCommand().equals("show")) {
			// System.out.println("show");
			StudentTableModel stutm = new StudentTableModel();// 生成新的model
			stutm.showAllData();// 执行显示所有
			jt.setModel(stutm);// 更新表格model
		}
	}

	/** 输入编号标签 */
	private JLabel lbId;

	/** 接收编号的输入框 */
	private JTextField tfId;

	/** 插入按钮 */
	private JButton butInsert;

	/** 删除按钮 */
	private JButton butDelete;

	/** 更新按钮 */
	private JButton butUpdate;

	/** 查询按钮 */
	private JButton butSelect;

	/** 显示所有按钮 */
	private JButton butShowAll;

	/** 滚动窗格 */
	private JScrollPane jsp;

	/** 表格 */
	private JTable jt;

	/** 用于初始化表格的model */
	private StudentTableModel stm;

	/** 北部paenl */
	private JPanel jpNorth;

	/** 南部paenl */
	private JPanel jpSouth;
}

StudentTableModel.java(表格model)

package com.laolang.ui;

import java.sql.SQLException;
import java.util.List;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

import com.laolang.dao.StudentDao;
import com.laolang.dao.impl.StudentDaoImpl;
import com.laolang.domain.Student;

// TODO: Auto-generated Javadoc
/**
 * 主窗口中,表格模型
 */
public class StudentTableModel extends AbstractTableModel{

	/**
	 * Instantiates a new student table model.
	 */
	public StudentTableModel(){
		init();
	}
	
	/**
	 * 初始化,只完成表头部分
	 */
	private void init(){
		rowData = http://www.mamicode.com/new Vector();>

StudentInsertDialog(添加数据对话框)

package com.laolang.ui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.laolang.domain.Student;

/**
 * 添加学生信息对话框
 */
public class StudentInsertDialog extends JDialog implements ActionListener {

	/**
	 * Instantiates a new student insert dialog.
	 */
	public StudentInsertDialog() {
		super();
	}

	/**
	 * Instantiates a new student insert dialog.
	 * 
	 * @param owner
	 *            the owner
	 * @param title
	 *            the title
	 * @param modal
	 *            the modal
	 */
	public StudentInsertDialog(Frame owner, String title, boolean modal) {
		super(owner, title, modal);
		init();
		setComm();
		this.setSize(300, 180);
		this.setVisible(true);
		this.setResizable(false);

	}

	/**
	 * 初始化
	 */
	private void init() {
		// 创建组件
		this.labelId = new JLabel("编号");
		this.labelName = new JLabel("姓名");
		this.labelAge = new JLabel("年龄");
		this.labelSex = new JLabel("性别");

		this.tfId = new JTextField(20);
		this.tfName = new JTextField(20);
		this.tfAge = new JTextField(20);
		this.tfSex = new JTextField(20);

		this.butOk = new JButton("确定");
		this.butCanel = new JButton("取消");

		this.jpCenterLeft = new JPanel();
		this.jpCenterRight = new JPanel();
		this.jpCenter = new JPanel();
		this.jpSouth = new JPanel();

		// 设置布局
		this.setLayout(new BorderLayout());
		this.jpCenterLeft.setLayout(new GridLayout(6, 1));
		this.jpCenterRight.setLayout(new GridLayout(6, 1));
		this.jpCenter.setLayout(new FlowLayout());
		this.jpSouth.setLayout(new FlowLayout());

		// 添加组件到面板
		this.jpCenterLeft.add(this.labelId);
		this.jpCenterLeft.add(this.labelName);
		this.jpCenterLeft.add(this.labelAge);
		this.jpCenterLeft.add(this.labelSex);

		this.jpCenterRight.add(this.tfId);
		this.jpCenterRight.add(this.tfName);
		this.jpCenterRight.add(this.tfAge);
		this.jpCenterRight.add(this.tfSex);

		this.jpCenter.add(this.jpCenterLeft);
		this.jpCenter.add(this.jpCenterRight);

		this.jpSouth.add(this.butOk);
		this.jpSouth.add(this.butCanel);

		// 面板添加到窗体
		this.add(this.jpCenter);
		this.add(this.jpSouth, BorderLayout.SOUTH);

	}

	/**
	 * 注册监听、设置命令.
	 */
	private void setComm() {
		this.butOk.addActionListener(this);
		this.butCanel.addActionListener(this);

		this.butOk.setActionCommand("ok");
		this.butCanel.setActionCommand("canel");
	}

	/*
	 * (non-Javadoc) 事件处理
	 * 
	 * @see
	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("ok")) {
			// 如果点击 确定,则创建一个Student对象,并对各个属性赋值
			this.stu = new Student();
			this.stu.setStuId(Integer.valueOf(this.tfId.getText()).intValue());
			this.stu.setStuName(this.tfName.getText());
			this.stu.setStuAge(Integer.valueOf(this.tfAge.getText()).intValue());
			this.stu.setStuSex(this.tfSex.getText());
			// 隐藏对话框
			this.setVisible(false);

		} else if (e.getActionCommand().equals("canel")) {
			// 如果点击取消,则置Student为空
			this.stu = null;
			// 隐藏对话框
			this.setVisible(false);
		}
	}

	/** The label id. */
	private JLabel labelId;

	/** The label name. */
	private JLabel labelName;

	/** The label age. */
	private JLabel labelAge;

	/** The label sex. */
	private JLabel labelSex;

	/** The tf id. */
	private JTextField tfId;

	/** The tf name. */
	private JTextField tfName;

	/** The tf age. */
	private JTextField tfAge;

	/** The tf sex. */
	private JTextField tfSex;

	/** The but ok. */
	private JButton butOk;

	/** The but canel. */
	private JButton butCanel;

	/** The jp center left. */
	private JPanel jpCenterLeft;

	/** The jp center right. */
	private JPanel jpCenterRight;

	/** The jp center. */
	private JPanel jpCenter;

	/** The jp south. */
	private JPanel jpSouth;

	/** The stu. */
	private Student stu;

	/**
	 * Gets the stu.
	 * 
	 * @return the stu
	 */
	public Student getStu() {
		return stu;
	}

}

StudentUpdateDialog(修改数据对话框)

package com.laolang.ui;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.laolang.domain.Student;

// TODO: Auto-generated Javadoc
/**
 * 学生信息更新对话框 本类有一个 Student对象,用于记录各输入框中的值
 */
public class StudentUpdateDialog extends JDialog implements ActionListener {

	/**
	 * Instantiates a new student insert dialog.
	 */
	public StudentUpdateDialog() {
		super();
	}

	/**
	 * Instantiates a new student insert dialog.
	 * 
	 * @param owner
	 *            the owner
	 * @param title
	 *            the title
	 * @param modal
	 *            the modal
	 * @param stu
	 *            the stu
	 */
	public StudentUpdateDialog(Frame owner, String title, boolean modal,
			Student stu) {
		super(owner, title, modal);
		init(stu);
		setComm();
		setSize(300, 180);
		setVisible(true);
		setResizable(false);

	}

	/**
	 * 创建各组件
	 * 
	 * @param s
	 *            the s
	 */
	private void init(Student s) {
		stu = new Student();// 创建 Student对象
		// 设置各属性值为选中行的相应的值
		stu.setStuId(s.getStuId());
		stu.setStuName(s.getStuName());
		stu.setStuAge(s.getStuAge());
		stu.setStuSex(s.getStuSex());
		// 创建组件
		labelId = new JLabel("编号");
		labelName = new JLabel("姓名");
		labelAge = new JLabel("年龄");
		labelSex = new JLabel("性别");

		tfId = new JTextField(String.valueOf(stu.getStuId()), 20);
		tfId.setEditable(false);
		tfName = new JTextField(stu.getStuName(), 20);
		tfAge = new JTextField(String.valueOf(stu.getStuAge()), 20);
		tfSex = new JTextField(stu.getStuSex(), 20);

		butOk = new JButton("确定");
		butCanel = new JButton("取消");

		jpCenterLeft = new JPanel();
		jpCenterRight = new JPanel();
		jpCenter = new JPanel();
		jpSouth = new JPanel();

		// 设置布局
		setLayout(new BorderLayout());
		jpCenterLeft.setLayout(new GridLayout(6, 1));
		jpCenterRight.setLayout(new GridLayout(6, 1));
		jpCenter.setLayout(new FlowLayout());
		jpSouth.setLayout(new FlowLayout());

		// 添加组件到面板
		jpCenterLeft.add(labelId);
		jpCenterLeft.add(labelName);
		jpCenterLeft.add(labelAge);
		jpCenterLeft.add(labelSex);

		jpCenterRight.add(tfId);
		jpCenterRight.add(tfName);
		jpCenterRight.add(tfAge);
		jpCenterRight.add(tfSex);

		jpCenter.add(jpCenterLeft);
		jpCenter.add(jpCenterRight);

		jpSouth.add(butOk);
		jpSouth.add(butCanel);

		// 面板添加到窗体
		add(jpCenter);
		add(jpSouth, BorderLayout.SOUTH);

	}

	/**
	 * 注册监听、设置命令.
	 */
	private void setComm() {
		butOk.addActionListener(this);
		butCanel.addActionListener(this);

		butOk.setActionCommand("ok");
		butCanel.setActionCommand("canel");
	}

	/*
	 * (non-Javadoc) 事件处理
	 * 
	 * @see
	 * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("ok")) {
			// 修改Student对象的值
			stu.setStuName(tfName.getText());
			stu.setStuAge(Integer.valueOf(tfAge.getText()).intValue());
			stu.setStuSex(tfSex.getText());
			// 隐藏对话框
			setVisible(false);

		} else if (e.getActionCommand().equals("canel")) {
			// 如果选择取消,则置Student对象为空
			stu = null;
			// 隐藏对话框
			setVisible(false);
		}
	}

	/** The label id. */
	private JLabel labelId;

	/** The label name. */
	private JLabel labelName;

	/** The label age. */
	private JLabel labelAge;

	/** The label sex. */
	private JLabel labelSex;

	/** The tf id. */
	private JTextField tfId;

	/** The tf name. */
	private JTextField tfName;

	/** The tf age. */
	private JTextField tfAge;

	/** The tf sex. */
	private JTextField tfSex;

	/** The but ok. */
	private JButton butOk;

	/** The but canel. */
	private JButton butCanel;

	/** The jp center left. */
	private JPanel jpCenterLeft;

	/** The jp center right. */
	private JPanel jpCenterRight;

	/** The jp center. */
	private JPanel jpCenter;

	/** The jp south. */
	private JPanel jpSouth;

	/** The stu. */
	private Student stu;

	/**
	 * Gets the stu.
	 * 
	 * @return the stu
	 */
	public Student getStu() {
		return stu;
	}

}