import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.text.*; class MVCExample extends JFrame { MVCExample(){ super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(750, 100); setTitle("MVCExample"); JTextField tf1 = new JTextField(10); tf1.setFont( new Font("Serif",Font.ITALIC,32) ); final Document document = tf1.getDocument(); JTextField tf2 = new JTextField(document,null,10); tf2.setFont( new Font("Serif",Font.BOLD,32) ); DocumentSizeView dsv = new DocumentSizeView( document ); dsv.setFont( new Font("Serif",Font.PLAIN,32) ); Container c = this.getContentPane(); c.setLayout(new FlowLayout()); c.add( tf1 ); c.add( tf2 ); c.add( dsv ); c.add( new DocumentSizeView( document ) ); final Timer timer = new Timer(3000, new ActionListener(){ public void actionPerformed(ActionEvent e){ try{ document.insertString(0, "*", null); }catch(Exception nono){} } }); timer.setInitialDelay(10000); timer.start(); JSlider slider = new JSlider(JSlider.HORIZONTAL, 500, 15000, 3000); slider.addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); if (!source.getValueIsAdjusting()) { int newDelay = (int)source.getValue(); timer.setDelay(newDelay); } }}); c.add(slider); setVisible(true); } public static void main(String[] a){ new MVCExample(); } } class DocumentSizeView extends JLabel implements DocumentListener { Document d; DocumentSizeView(Document d){ super(""); this.d = d; setText("Size: " + d.getLength() ); d.addDocumentListener(this); } public void changedUpdate(DocumentEvent e) {} public void insertUpdate(DocumentEvent e) { setText("Size: " + d.getLength()); } public void removeUpdate(DocumentEvent e){ setText("Size: " + d.getLength()); } }