001 package util.swing;
002
003 import javax.swing.*;
004 import javax.swing.event.*;
005
006 /**
007 * A {@link JTextField} that writes its current content into a String referenced through an array. This is useful
008 * so that you will not need references to the <code>JTextField</code> in your code that might eventually lead
009 * to the text field being serialized which, in turn, might not work properly.
010 *
011 * <p><b>Note:</b> This class is not meant to be serialized!</p>
012 *
013 * @author Steffen Zschaler
014 * @version 2.0 28/07/1999
015 * @since v2.0
016 */
017 public class JTextInput extends JTextField {
018
019 /**
020 * ID for serialization.
021 */
022 private static final long serialVersionUID = 8302445242306618528L;
023
024 /**
025 * The currently referenced output observer. The current text of the input field can be found as the first
026 * element of the array.
027 *
028 * @serial This class is not meant to be serialized!
029 */
030 protected String[] m_asOutput;
031
032 /**
033 * Create a new <code>JTextInput</code>.
034 *
035 * @param asOutput the output observer. The current text of the input field can be found as the first
036 * element of the array at any time.
037 * @param sInitial the initial value of the text field.
038 */
039 public JTextInput(String[] asOutput, String sInitial) {
040 super(sInitial);
041
042 m_asOutput = asOutput;
043
044 getDocument().addDocumentListener(new DocumentListener() {
045 public void changedUpdate(DocumentEvent e) {
046 performUpdate();
047 }
048
049 public void insertUpdate(DocumentEvent e) {
050 performUpdate();
051 }
052
053 public void removeUpdate(DocumentEvent e) {
054 performUpdate();
055 }
056
057 private void performUpdate() {
058 m_asOutput[0] = getText();
059 }
060 });
061 }
062 }