FileDocCategorySizeDatePackage
SwingTypeTester.javaAPI DocExample3478Wed Apr 14 23:04:00 BST 2004javathreads.examples.ch02.example6

SwingTypeTester

public class SwingTypeTester extends JFrame implements CharacterSource

Fields Summary
protected RandomCharacterGenerator
producer
private CharacterDisplayCanvas
displayCanvas
private CharacterDisplayCanvas
feedbackCanvas
private JButton
quitButton
private JButton
startButton
private JButton
stopButton
private CharacterEventHandler
handler
private Thread
displayThread
Constructors Summary
public SwingTypeTester()

        initComponents();
    
Methods Summary
public voidaddCharacterListener(CharacterListener cl)

        handler.addCharacterListener(cl);
    
private voidinitComponents()

        handler = new CharacterEventHandler();
        displayCanvas = new CharacterDisplayCanvas();
        feedbackCanvas = new CharacterDisplayCanvas(this);
        quitButton = new JButton();
        startButton = new JButton();
        stopButton = new JButton();
        add(displayCanvas, BorderLayout.NORTH);
        add(feedbackCanvas, BorderLayout.CENTER);
        JPanel p = new JPanel();
        startButton.setLabel("Start");
        stopButton.setLabel("Stop");
        quitButton.setLabel("Quit");
        p.add(startButton);
        p.add(stopButton);
        p.add(quitButton);
        add(p, BorderLayout.SOUTH);

        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                quit();
            }
        });

        feedbackCanvas.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent ke) {
                char c = ke.getKeyChar();
                if (c != KeyEvent.CHAR_UNDEFINED)
                    newCharacter((int) c);
            }
        });
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                producer = new RandomCharacterGenerator();
                displayCanvas.setCharacterSource(producer);
                displayThread = new Thread(producer);
                displayThread.start();
                startButton.setEnabled(false);
                stopButton.setEnabled(true);
                feedbackCanvas.setEnabled(true);
                feedbackCanvas.requestFocus();
            }
        });
        stopButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                startButton.setEnabled(true);
                stopButton.setEnabled(false);
                displayThread.interrupt();
                feedbackCanvas.setEnabled(false);
            }
        });
        quitButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                quit();
            }
        });
            

        pack();
    
public static voidmain(java.lang.String[] args)

        new SwingTypeTester().show();
    
public voidnewCharacter(int c)

        handler.fireNewCharacter(this, c);
    
public voidnextCharacter()

        throw new IllegalStateException("We don't produce on demand");
    
private voidquit()

        System.exit(0);
    
public voidremoveCharacterListener(CharacterListener cl)

        handler.removeCharacterListener(cl);