package edu.pdx.cs410J.grader;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
/**
* This panel displays and edits notes.
*
* @author David Whitlock
* @version $Revision: 1.6 $
* @since Fall 2000
*/
@SuppressWarnings("serial")
public class NotesPanel extends JPanel {
private Notable notable;
// GUI components we care about
private JList notesList;
private JButton add;
/**
* Creates a new <code>NotePanel</code> for displaying the notes of
* some <code>Notable</code> object.
*/
public NotesPanel() {
this.setLayout(new BorderLayout());
Border notesBorder = BorderFactory.createTitledBorder("Notes");
this.setBorder(notesBorder);
this.notesList = new JList();
this.add(new JScrollPane(notesList), BorderLayout.CENTER);
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
final JTextField field = new JTextField(20);
panel.add(field);
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent e) {
String note = field.getText();
if (note != null && !note.equals("") && notable != null) {
notable.addNote(note);
setNotable(notable);
}
field.setText("");
}
};
field.addActionListener(action);
this.add = new JButton("Add");
this.add.setEnabled(false);
this.add.addActionListener(action);
panel.add(this.add);
final JButton delete = new JButton("Delete");
delete.setEnabled(false);
delete.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String note = (String) notesList.getSelectedValue();
if (note == null) {
return;
}
if (notable != null) {
notable.removeNote(note);
setNotable(notable);
}
}
});
notesList.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (notesList.isSelectionEmpty()) {
delete.setEnabled(false);
} else {
delete.setEnabled(true);
}
}
});
panel.add(delete);
this.add(panel, BorderLayout.SOUTH);
}
/**
* Sets the <code>Notable</code> that is being displayed/edited by
* this <code>NotesPanel</code>.
*/
public void setNotable(Notable notable) {
clearNotes(); // Start from scratch
this.notable = notable;
this.notesList.setListData(notable.getNotes().toArray());
this.add.setEnabled(true);
}
/**
* Returns the <code>Notable</code> edited by this
* <code>NotesPanel</code>.
*/
public Notable getNotable() {
return this.notable;
}
/**
* Clears the contents of the notes list
*/
public void clearNotes() {
this.notesList.setListData(new Vector());
this.notable = null;
}
}