package interfaces.editClass;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Comparator;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.RowSorter;
import javax.swing.SortOrder;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;
/**
*
* @author Lilong
*/
public class AddNewStudent extends javax.swing.JPanel {
private EditSelectedClass parent;
private boolean isTableSet = false;
/**
* Creates new form AddNewStudent
*/
public AddNewStudent(EditSelectedClass p) {
parent = p;
initComponents();
populateTable();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void setup() {
model = (DefaultTableModel)studentTable.getModel();
TableRowSorter sorter = new TableRowSorter(model);
sorter.setComparator(0, new Comparator(){
@Override
public int compare(Object arg0, Object arg1) {
return arg0.toString().compareTo(arg1.toString());
}
});
ArrayList sortKeys = new ArrayList();
sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING));
sorter.setSortKeys(sortKeys);
studentTable.setRowSorter(sorter);
sorter.sort();
}
public void populateTable() {
isTableSet = false;
for (int i = model.getRowCount()-1; i >= 0; i--) {
model.removeRow(i);
}
for (int i = 0; i < parent.parent.courses.get(parent.courseIndex).getNumberOfStudents(); i++) {
model.insertRow(i, new Object[]{
parent.parent.courses.get(parent.courseIndex).getStudent(i).getLastName(),
parent.parent.courses.get(parent.courseIndex).getStudent(i).getFirstName(),
parent.parent.courses.get(parent.courseIndex).getStudent(i).getPseudoName()});
}
isTableSet = true;
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings({ "unchecked", "serial" })
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
firstNameLabel = new javax.swing.JLabel();
firstNameTextField = new javax.swing.JTextField();
lastNameLabel = new javax.swing.JLabel();
lastNameTextField = new javax.swing.JTextField();
addButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
title = new javax.swing.JLabel();
studentTable = new JTable() {
public void changeSelection(final int row, final int column, boolean toggle, boolean extend) {
super.changeSelection(row, column, toggle, extend);
studentTable.editCellAt(row, column);
studentTable.transferFocus();
}
};
studentTable.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
studentTable.setModel(model);
firstNameLabel.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
firstNameLabel.setText("First Name:");
firstNameTextField.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
firstNameTextField.setText("");
lastNameLabel.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
lastNameLabel.setText("Last Name:");
lastNameTextField.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
lastNameTextField.setText("");
addButton.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
addButton.setText("Add");
addButton.addActionListener(parent);
addButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
addButtonActionPerformed(evt);
}
});
cancelButton.setFont(new java.awt.Font("Georgia", 0, 14)); // NOI18N
cancelButton.setText("Return");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
title.setFont(new java.awt.Font("Georgia", 0, 18)); // NOI18N
title.setText(parent.parent.courses.get(parent.courseIndex).getName() + " Students");
studentTable.getModel().addTableModelListener(changedData());
jScrollPane1.setViewportView(studentTable);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(title)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addComponent(addButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(firstNameLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(firstNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(lastNameLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(lastNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE)
.addContainerGap())))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(title)
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(firstNameLabel)
.addComponent(firstNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lastNameLabel)
.addComponent(lastNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(addButton)
.addComponent(cancelButton))
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed
if (studentTable.isEditing()) {
studentTable.getCellEditor().stopCellEditing();
}
if (firstNameTextField.getText().equals("")) {
firstNameTextField.requestFocus();
return;
}
else if (lastNameTextField.getText().equals("")) {
lastNameTextField.requestFocus();
return;
}
if (!checkName(firstNameTextField.getText(), lastNameTextField.getText())) {
parent.parent.courses.get(parent.courseIndex).addStudent(firstNameTextField.getText(), lastNameTextField.getText());
parent.addRemoveStudent(parent.parent.courses.get(parent.courseIndex).getNumberOfStudents()-1);
firstNameTextField.setText("");
lastNameTextField.setText("");
populateTable();
firstNameTextField.requestFocus();
parent.saveCurrentState();
}
}//GEN-LAST:event_addButtonActionPerformed
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
if (studentTable.isEditing()) {
studentTable.getCellEditor().stopCellEditing();
}
parent.populateTable();
parent.parent.setEditSelectedClassVisible(parent);
parent.saveCurrentState();
}//GEN-LAST:event_cancelButtonActionPerformed
private TableModelListener changedData() {
TableModelListener cha = new TableModelListener() {
public void tableChanged(TableModelEvent e) {
if (isTableSet) {
int r = e.getLastRow();
int c = e.getColumn();
if (c == 0) {
if (!checkName(model.getValueAt(r, 1).toString(), model.getValueAt(r, 0).toString()))
parent.parent.getCourses().get(parent.courseIndex).getStudent(r).setLastName(model.getValueAt(r, c).toString());
}
else if (c == 1) {
if (!checkName(model.getValueAt(r, 1).toString(), model.getValueAt(r, 0).toString()))
parent.parent.getCourses().get(parent.courseIndex).getStudent(r).setFirstName(model.getValueAt(r, c).toString());
}
}
}
};
return cha;
}
private boolean checkName(String fn, String ln) {
int studentIndex = parent.parent.courses.get(parent.courseIndex).getStudentIndex(ln + ", " + fn);
if (studentIndex < 0)
return false;
else
return true;
}
// Variables declaration - do not modify//GEN-BEGIN:variables
@SuppressWarnings("serial")
public DefaultTableModel model = new DefaultTableModel(
new Object [][] {
},
new String [] {
"Last Name", "First Name", "Ghost Name"
}
) {
public boolean isCellEditable(int row, int column) {
if (column == 2)
return false;
else
return true;
}
};
public javax.swing.JButton addButton;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel firstNameLabel;
public javax.swing.JTextField firstNameTextField;
private javax.swing.JLabel lastNameLabel;
public javax.swing.JTextField lastNameTextField;
private javax.swing.JTable studentTable;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel title;
// End of variables declaration//GEN-END:variables
}