/* * @(#)CTallyChartUI.java 0.0.1 99/07/29 * * Copyright (c) 1999 by Willie Wheeler. All rights reserved. */ package stats.plaf.concrete; import java.awt.*; import javax.swing.*; import javax.swing.plaf.*; import stats.*; import stats.plaf.*; /** * @version 0.0.1 07/29/99 * @author Willie Wheeler */ public class CTallyChartUI extends TallyChartUI { protected static CTallyChartUI ui = new CTallyChartUI(); private static final int STROKE_HEIGHT = 20; private static final int STROKE_VGAP = 5; private static final int STROKE_HGAP = 4; private static final int XPAD = 5; private static final int YPAD = 5; /** * Returns a static BasicTallyChartUI object. */ public static ComponentUI createUI(JComponent c) { return ui; } public void paint(Graphics g, JComponent c) { // For convenience. Chart chart = (Chart)c; int numCats = chart.getNumStates(); // Initialize. int tallyHeight = (numCats * STROKE_HEIGHT) + ((numCats-1) * STROKE_VGAP); g.translate(XPAD, (c.getSize().height - tallyHeight) / 2); int hpos = 0; int vpos = 0; // Loop over data. for (int i = 0; i < numCats; i++) { hpos = 0; vpos = ((STROKE_HEIGHT + STROKE_VGAP) * i); g.setColor(chart.getStateColor(i)); // Paint strokes. for (int j = 1; j <= (int)chart.getStateValue(i); j++) { hpos = STROKE_HGAP * j; if (j%5 > 0) { // Vertical stroke. g.drawLine(hpos, vpos, hpos, vpos + STROKE_HEIGHT); g.drawLine(hpos+1, vpos, hpos+1, vpos + STROKE_HEIGHT); } else { // Diagonal stroke. g.drawLine(hpos, vpos+2, STROKE_HGAP*(j-5), vpos+STROKE_HEIGHT-3); g.drawLine(hpos, vpos+3, STROKE_HGAP*(j-5), vpos+STROKE_HEIGHT-2); } } // Paint value label. g.setColor(Color.black); g.drawString(chart.getStateValueAsString(i), hpos+10, vpos+STROKE_HEIGHT-3); } } }