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 }