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