FileDocCategorySizeDatePackage
ScoreLabel.javaAPI DocExample2826Sat Apr 17 23:31:38 BST 2004javathreads.examples.ch08.example4

ScoreLabel

public class ScoreLabel extends JLabel implements CharacterListener

Fields Summary
private volatile int
score
private int
char2type
private CharacterSource
generator
private CharacterSource
typist
private Lock
scoreLock
private CharCounter
counter
Constructors Summary
public ScoreLabel(CharacterSource generator, CharacterSource typist, CharCounter ct)


           
        this.generator = generator;
        this.typist = typist;
        counter = ct;
        if (generator != null)
            generator.addCharacterListener(this);
        if (typist != null)
            typist.addCharacterListener(this);
    
Methods Summary
public voidnewCharacter(CharacterEvent ce)

        scoreLock.lock();
        try {
            if (ce.source == generator) {
                if (char2type != -1) {
                    score--;
                    setScore();
        	    counter.incorrectChar(char2type);
                }
                char2type = ce.character;
            }
            else {
                if (char2type != ce.character) {
                    score--;
        	    counter.incorrectChar(ce.character);
                } else {
                    score++;
        	    counter.correctChar(ce.character);
                    char2type = -1;
                }
            }
            setScore();
        } finally {
            scoreLock.unlock();
        }
    
public voidresetGenerator(CharacterSource newGenerator)

        try {
            scoreLock.lock();
            if (generator != null)
                generator.removeCharacterListener(this);
            generator = newGenerator;
            if (generator != null)
                generator.addCharacterListener(this);
        } finally {
            scoreLock.unlock();
        }
    
public voidresetScore()

       try {
           scoreLock.lock();
           score = 0;
           char2type = -1;
           setScore();
       } finally {
           scoreLock.unlock();
       }
    
public voidresetTypist(CharacterSource newTypist)

        try {
            scoreLock.lock();
            if (typist != null)
                typist.removeCharacterListener(this);
            typist = newTypist;
            if (typist != null)
                typist.addCharacterListener(this);
        } finally {
            scoreLock.unlock();
        }
    
private voidsetScore()

        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                setText(Integer.toString(score));
            }
        });