FileDocCategorySizeDatePackage
EmailEditor.javaAPI DocExample2289Thu Oct 24 20:14:26 BST 2002None

EmailEditor.java

// EmailEditor.java
// An extension of JTextField that requires an "@" somewhere in the field.
// Meant to be used as a cell editor within a JTable or JTree.
//
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
import java.util.*;

public class EmailEditor extends JTextField implements CellEditor {
  String value = "";
  Vector listeners = new Vector();

  // Mimic all the constructors people expect with text fields.
  public EmailEditor() { this("", 5); }
  public EmailEditor(String s) { this(s, 5); }
  public EmailEditor(int w) { this("", w); }
  public EmailEditor(String s, int w) { 
    super(s, w); 
    // Listen to our own action events so that we know when to stop editing.
    addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        if (stopCellEditing()) { fireEditingStopped(); }
      }
    });
  }

  // Implement the CellEditor methods.
  public void cancelCellEditing() { setText(""); }

  // Stop editing only if the user entered a valid value.
  public boolean stopCellEditing() {
    try {
      String tmp = getText();
      int at = tmp.indexOf("@");
      if (at != -1) {
        value = tmp;
        return true;
      }
      return false;
    }
    catch (Exception e) {
      // Something went wrong (most likely we don't have a valid integer).
      return false;
    }
  }

  public Object getCellEditorValue() { return value; }

  // Start editing when the right mouse button is clicked.
  public boolean isCellEditable(EventObject eo) {
    if ((eo == null) || 
        ((eo instanceof MouseEvent) && 
         (((MouseEvent)eo).isMetaDown()))) {
      return true;
    }
    return false;
  }

  public boolean shouldSelectCell(EventObject eo) { return true; }

  // Add support for listeners.
  public void addCellEditorListener(CellEditorListener cel) {
    listeners.addElement(cel);
  }

  public void removeCellEditorListener(CellEditorListener cel) {
    listeners.removeElement(cel);
  }

  protected void fireEditingStopped() {
    if (listeners.size() > 0) {
      ChangeEvent ce = new ChangeEvent(this);
      for (int i = listeners.size() - 1; i >= 0; i--) {
        ((CellEditorListener)listeners.elementAt(i)).editingStopped(ce);
      }
    }
  }
}