Computer Science 120
Introduction to Programming

Spring 2012, Siena College

FourVoting Demo

A working demo of FourVoting will appear below. Click inside the applet to interact with it.



FourVoting BlueJ Project

Click here to download a BlueJ project for FourVoting.


FourVoting Source Code

The Java source code for FourVoting is below. Click on a file name to download it.


FourVoting.java

import objectdraw.*;
import java.awt.*;

/*
 * Example FourVoting
 *
 * Example similar to one from Section 4.5 of the text demonstrating
 * a four-candidate voting system.
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 *
 * $Id: FourVoting.java 1516 2011-01-31 21:08:19Z terescoj $
 */

public class FourVoting extends WindowController {

    private int countA = 0;       // number of votes for A
    private int countB = 0;       // number of votes for B
    private int countC = 0;       // number of votes for C
    private int countD = 0;       // number of votes for D

    private Text infoA;           // display of votes for A
    private Text infoB;           // display of votes for B
    private Text infoC;           // display of votes for C
    private Text infoD;           // display of votes for D

    private static final int TEXT_OFFSET = 25;  // offset of text from corner
    private static final int TEXT_SIZE = 60;

    // we will compute once and reuse the midpoints of the canvas
    private double midX;
    private double midY;

    // Create displays with voting board and results
    public void begin() {

        // set these variables for convenience
        midX = canvas.getWidth()/2;
        midY = canvas.getHeight()/2;

        infoA = new Text("A: 0", TEXT_OFFSET, TEXT_OFFSET, canvas);
        infoB = new Text("B: 0", midX + TEXT_OFFSET, TEXT_OFFSET, canvas);
        infoC = new Text("C: 0", TEXT_OFFSET, midY + TEXT_OFFSET, canvas);
        infoD = new Text("D: 0", midX + TEXT_OFFSET, midY + TEXT_OFFSET, canvas);
        infoA.setFontSize(TEXT_SIZE);
        infoB.setFontSize(TEXT_SIZE);
        infoC.setFontSize(TEXT_SIZE);
        infoD.setFontSize(TEXT_SIZE);

        new Line(0, midY, canvas.getWidth(), midY, canvas );
        new Line(midX, 0, midX, canvas.getHeight(), canvas );
    }

    // Update votes and display vote counts
    public void onMouseClick( Location point ) {

        if ( point.getX() < midX && point.getY() < midY ) {       // upper-left
            countA++;
            infoA.setText( "A: " + countA);
        } 
        else if ( point.getX() >= midX && point.getY() < midY ) { // upper-right
            countB++;
            infoB.setText( "B: " + countB);
        } 
        else if ( point.getX() < midX && point.getY() >= midY ) { // lower-left
            countC++;
            infoC.setText( "C: " + countC);
        } 
        else {                                                      // lower-right
            countD++;
            infoD.setText( "D: " + countD);
        }
    }
}