📄 studenttablemodel.java
字号:
package org.signsmile.view.student;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Vector;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
import org.minjey.cjsjk.core.ModelManager;
import org.minjey.cjsjk.core.SysDict;
import org.minjey.cjsjk.model.Course;
import org.minjey.cjsjk.model.Major;
import org.minjey.cjsjk.model.Student;
import org.minjey.cjsjk.model.StudentCourse;
import org.minjey.cjsjk.model.StudentStatue;
import org.minjey.cjsjk.report.ReportManager;
import org.minjey.cjsjk.report.ReportManagerImpl;
import org.minjey.cjsjk.util.OrderFactory;
import org.signsmile.view.MainFrame;
import org.signsmile.view.util.CourseComparator;
import org.signsmile.view.util.StudentComparator;
public class StudentTableModel extends AbstractTableModel {
private static final long serialVersionUID = 1L;
private ModelManager modelManager;
private StudentTable table;
private Major major;
protected Vector<Student> dataStudent;
protected Vector<Course> courses;
private String[] DefaultColumnIdentifiers = { "", "学号", "姓名", "状态", "年龄",
"性别", "证件号码", "备注" };
protected Vector<String> columnIdentifiers;
private HashMap<Integer, Object> lastStudentCourses;
@SuppressWarnings("unchecked")
public StudentTableModel(Major major) {
columnIdentifiers = new Vector<String>();
lastStudentCourses = new HashMap<Integer, Object>();
dataStudent = null;
courses = null;
this.major = null;
this.major = major;
courses = new Vector<Course>((Collection<? extends Course>) major
.getCourses().values());
Comparator<Object> compC = new CourseComparator();
Collections.sort(courses, compC);
dataStudent = new Vector<Student>((Collection<? extends Student>) major
.getStudents().values());
Comparator<Object> compS = new StudentComparator();
Collections.sort(dataStudent, compS);
dataStudent.add(new Student());
for (int i = 0; i < DefaultColumnIdentifiers.length; i++) {
columnIdentifiers.add(DefaultColumnIdentifiers[i]);
}
for (int i = 0; i < courses.size(); i++) {
columnIdentifiers.add(columnIdentifiers.size() - 1, courses.get(i)
.getName());
lastStudentCourses.put(courses.get(i).getId(), new StudentCourse());
}
modelManager = MainFrame.getModelManager();
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return false;
} else {
return true;
}
}
@Override
public int getColumnCount() {
return columnIdentifiers.size();
}
@Override
public int getRowCount() {
return dataStudent.size();
}
@Override
public String getColumnName(int columnIndex) {
return columnIdentifiers.get(columnIndex);
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex <= DefaultColumnIdentifiers.length - 2) {
return getStudentinfo(dataStudent.get(rowIndex), rowIndex,
columnIndex);
} else if (columnIndex == columnIdentifiers.size() - 1) {
return dataStudent.get(rowIndex).getBz();
} else {
return getStudentGrade(dataStudent.get(rowIndex), courses
.get(columnIndex - (DefaultColumnIdentifiers.length - 1)));
}
}
private Object getStudentGrade(Student student, Course course) {
if (student.getId() != null) {
student = (Student) major.getStudents().get(student.getId());
HashMap<Integer, Object> studentcourses = student
.getStudentcourses();
StudentCourse studentCourse = (StudentCourse) studentcourses
.get(course.getId());
System.out.println("studentCourse = " + studentCourse);
if (studentCourse != null) {
return studentCourse.getGrade();
} else {
return null;
}
} else {
return ((StudentCourse) lastStudentCourses.get(course.getId()))
.getGrade();
}
}
private Object getStudentinfo(Student student, int rowIndex, int columnIndex) {
switch (columnIndex) {
case 0:
if (rowIndex == dataStudent.size() - 1)
return " * ";
break;
case 1:
return student.getStuno();
case 2:
return student.getName();
case 3:
return student.getStudentstatue();
case 4:
return student.getAge() < 0 ? "" : student.getAge();
case 5:
return student.getSex();
case 6:
return student.getStuid();
}
return null;
}
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
if (rowIndex != dataStudent.size() - 1) {
setColumValue(dataStudent.get(rowIndex), value, rowIndex,
columnIndex);
} else {
setLastCoumValue(dataStudent.get(rowIndex), value, rowIndex,
columnIndex);
}
fireTableCellUpdated(rowIndex, columnIndex);
}
private void setLastCoumValue(Student student, Object value, int rowIndex,
int columnIndex) {
if (columnIndex <= DefaultColumnIdentifiers.length - 2) {
setLastStudentinfo(student, value, rowIndex, columnIndex);
} else if (columnIndex == columnIdentifiers.size() - 1) {
student.setBz(value.toString().trim());
} else {
if (null != value) {
setLastStudentGrade(courses.get(columnIndex
- (DefaultColumnIdentifiers.length - 1)), value);
}
}
}
private void setLastStudentGrade(Course course, Object value) {
StudentCourse studentCourse = (StudentCourse) lastStudentCourses
.get(course.getId());
studentCourse.setGrade(value.toString().trim());
}
private void setLastStudentinfo(Student student, Object value,
int rowIndex, int columnIndex) {
if (value.toString().trim() != null
&& !"".equals(value.toString().trim())) {
switch (columnIndex) {
case 1:
student.setStuno(value.toString().trim());
break;
case 2:
student.setName(value.toString().trim());
setDefaultStudent(student);
addStudent(student);
break;
case 3:
student.setStudentstatue((StudentStatue) value);
break;
case 4:
try {
Integer age = Integer.parseInt(value.toString().trim());
student.setAge(age);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(table, "输入内容不合法,请重新输入!");
table.setfocus(rowIndex, columnIndex);
}
break;
case 5:
student.setSex(value.toString().trim());
break;
case 6:
student.setStuid(value.toString().trim());
break;
}
}
}
private void addStudent(Student student) {
modelManager.beforeEdit(student);
student.setStudentcourses(lastStudentCourses);
modelManager.save(student);
for (Course course : courses) {
StudentCourse studentCourse = (StudentCourse) (lastStudentCourses
.get(course.getId()));
studentCourse.setCourse(course);
studentCourse.setStudent(student);
modelManager.save(studentCourse);
}
lastStudentCourses = new HashMap<Integer, Object>();
for (int i = 0; i < courses.size(); i++) {
lastStudentCourses.put(courses.get(i).getId(), new StudentCourse());
}
dataStudent.add(new Student());
}
private void setDefaultStudent(Student student) {
if (student.getAge() == null) {
student.setAge(0);
}
if (student.getBz() == null) {
student.setBz("");
}
if (student.getMajor() == null) {
student.setMajor(major);
}
if (student.getSex() == null) {
student.setSex("");
}
if (student.getStudentstatue() == null) {
student.setStudentstatue((StudentStatue) SysDict.getSTUDENTSTATUE()
.get(2));
}
if (student.getStuno() == null) {
student.setStuno(String.valueOf(getRowCount()));
}
if (student.getStuid() == null) {
student.setStuid("");
}
if (student.getBz() == null) {
student.setBz("");
}
if (student.getSorder() == null) {
student.setSorder(OrderFactory.getNewOrder(major, student));
}
}
private void setColumValue(Student student, Object value, int rowIndex,
int columnIndex) {
if (columnIndex <= DefaultColumnIdentifiers.length - 2) {
setStudentinfo(student, value, rowIndex, columnIndex);
} else if (columnIndex == columnIdentifiers.size() - 1) {
modelManager.beforeEdit(student);
student.setBz(value.toString().trim());
modelManager.save(student);
} else {
if (value != null) {
setStudentGrade(student, courses.get(columnIndex
- (DefaultColumnIdentifiers.length - 1)), value);
}
}
}
private void setStudentGrade(Student student, Course course, Object value) {
if (student.getId() != null) {
HashMap<Integer, Object> studentcourses = student
.getStudentcourses();
StudentCourse studentCourse = (StudentCourse) studentcourses
.get(course.getId());
if (studentCourse == null) {
studentCourse = new StudentCourse();
studentCourse.setCourse(course);
studentCourse.setStudent(student);
studentcourses.put(course.getId(), studentCourse);
}
studentCourse.setGrade(value.toString().trim());
modelManager.save(studentCourse);
}
}
private void setStudentinfo(Student student, Object value, int rowIndex,
int columnIndex) {
switch (columnIndex) {
case 1:
modelManager.beforeEdit(student);
student.setStuno(value.toString().trim());
modelManager.save(student);
break;
case 2:
if (value.toString().trim() == null
|| "".equals(value.toString().trim())) {
JOptionPane.showMessageDialog(table, "学生姓名不能为空,请输入学生姓名!");
table.setfocus(rowIndex, columnIndex);
} else {
modelManager.beforeEdit(student);
student.setName(value.toString().trim());
modelManager.save(student);
}
break;
case 3:
modelManager.beforeEdit(student);
student.setStudentstatue((StudentStatue) value);
modelManager.save(student);
break;
case 4:
if (value.toString().trim() != null
&& !"".equals(value.toString().trim())) {
try {
Integer age = Integer.parseInt(value.toString().trim());
modelManager.beforeEdit(student);
student.setAge(age);
modelManager.save(student);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(table, "输入内容不合法,请重新输入!");
table.setfocus(rowIndex, columnIndex);
}
}
break;
case 5:
modelManager.beforeEdit(student);
student.setSex(value.toString().trim());
modelManager.save(student);
break;
case 6:
modelManager.beforeEdit(student);
student.setStuid(value.toString().trim());
modelManager.save(student);
break;
}
}
public void setTable(StudentTable jtable) {
this.table = jtable;
}
public void setShowType() {
JComboBox jcbStudentStatue = new JComboBox(SysDict.getSTUDENTSTATUE()
.values().toArray());
table.getColumn("状态").setCellEditor(
new DefaultCellEditor(jcbStudentStatue));
JComboBox jcbSex = new JComboBox();
jcbSex.addItem("男");
jcbSex.addItem("女");
jcbSex.addItem("");
table.getColumn("性别").setCellEditor(new DefaultCellEditor(jcbSex));
for (int i = 0; i < courses.size(); i++) {
if (courses.get(i).getExamtype().getId() == 2) {
JComboBox jcbGrade = new JComboBox();
jcbGrade.addItem("优秀");
jcbGrade.addItem("良好");
jcbGrade.addItem("中等");
jcbGrade.addItem("及格");
jcbGrade.addItem("不及格");
jcbGrade.addItem("");
table.getColumn(courses.get(i).getName()).setCellEditor(
new DefaultCellEditor(jcbGrade));
}
}
}
public void removeRow(int i) {
if (i != dataStudent.size() - 1) {
Student student = dataStudent.get(i);
modelManager.beforeEdit(student);
modelManager.delete(student);
dataStudent.removeElementAt(i);
fireTableRowsDeleted(i, i);
}
}
public void getSelectCourses() {
ReportManager reportManager = new ReportManagerImpl();
reportManager.previewCourseReport(major, courses);
}
@SuppressWarnings("unchecked")
public void getSelectStudents() {
ReportManager reportManager = new ReportManagerImpl();
Vector<Student> tempStu = new Vector<Student>();
for (int i = 0; i < dataStudent.size()-1; i++) {
tempStu.add(dataStudent.get(i));
}
reportManager.previewStudentReport(major, tempStu);
}
public void getSelectStudents(int[] inte) {
Vector<Student> tempStu = new Vector<Student>();
for (int i = 0; i < inte.length; i++) {
if (inte[i] != dataStudent.size() - 1) {
tempStu.add(dataStudent.get(inte[i]));
}
}
if (tempStu.size() != 0) {
ReportManager reportManager = new ReportManagerImpl();
reportManager.previewStudentReport(major, tempStu);
} else {
getSelectStudents();
}
}
public void getSelectCourses(int[] inte) {
Vector<Course> tempCou = new Vector<Course>();
for (int i = 0; i < inte.length; i++) {
if (inte[i] >= DefaultColumnIdentifiers.length - 1) {
tempCou.add(courses.get(inte[i]
- DefaultColumnIdentifiers.length + 1));
}
}
if (tempCou.size() != 0) {
ReportManager reportManager = new ReportManagerImpl();
reportManager.previewCourseReport(major, tempCou);
} else {
getSelectCourses();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -