/* * @(#)CBallSamplerUI.java 0.0.0 99/05/27 * * Copyright (c) 1999 by Willie Wheeler. All rights reserved. */ package stats.plaf.concrete; import java.awt.*; import javax.swing.*; import javax.swing.plaf.*; import javax.swing.table.*; import stats.*; import stats.plaf.*; /** * @version 0.0.0 05/27/99 * @author Willie Wheeler */ public class CBallSamplerUI extends BallSamplerUI { protected static ComponentUI ui = new CBallSamplerUI(); public static ComponentUI createUI(JComponent c) { return ui; } public void installUI(JComponent c) { BallSampler sampler = (BallSampler)c; sampler.setOpaque(true); sampler.setBackground(Color.black); } public void uninstallUI(JComponent c) { } public void paint(Graphics g, JComponent c) { BallSampler sampler = (BallSampler)c; DataTableModel pop = sampler.getPopulation(); int popSize = sampler.getPopulationSize(); Color[] catColors = sampler.getCategoryColors(); Dimension size = sampler.getSize(); int area = size.width * size.height; int ballGapSide = (int)(Math.sqrt(area / popSize)) + 1; if (ballGapSide < 4) { ballGapSide = 4; } int gapSide = ballGapSide / 4; int ballSide = ballGapSide - (2 * gapSide); int x = 0; int y = 0; for (int i = 0; i < popSize; i++) { // Highlight ball if selected. if (sampler.getMultiplicity(i) > 0) { g.setColor(Color.white); g.fillRect(x, y, ballGapSide, ballGapSide); } // Paint ball. int colorIndex = ((Integer)pop.getValueAt(i, 0)).intValue(); g.setColor(catColors[colorIndex]); g.fillRect(x + gapSide, y + gapSide, ballSide, ballSide); // Increment coords. x += ballGapSide; if (x >= size.width) { x = 0; y += ballGapSide; } } } public Dimension getPreferredSize(JComponent c) { return new Dimension(200, 200); } public Dimension getMinimumSize(JComponent c) { return getPreferredSize(c); } public Dimension getMaximumSize(JComponent c) { return getPreferredSize(c); } }