// StarFieldView.java // Author: P Gray // starfield for displaying financial data import java.awt.*; import java.awt.event.*; import java.util.Vector; import java.util.Enumeration; class StarFieldView extends Panel { private Point axisOrigin; private int width, height; private double scale; private SourceDomain sourceDomain; private double cacheX[], cacheY[]; private int selected; public StarFieldView(SourceDomain sourceDomain, double scale) { setSize(new Dimension(100,100)); // initialise origin to midpoint of panel axisOrigin = new Point(); // initialise scale this.scale = scale; // initialise data this.sourceDomain = sourceDomain; int dataSize = sourceDomain.dataSize(); cacheX = new double[dataSize]; cacheY = new double[dataSize]; loadData(0,1); selected = -1; } public void paint(Graphics g) { Vector coords; double x, y; // get panel dimensions height = getSize().height; width = getSize().width; // set axis to center axisOrigin.setX(width / 2); axisOrigin.setY(height / 2); // draw the axes g.setColor(Color.blue); g.drawLine(0,axisOrigin.getY(),width,axisOrigin.getY()); g.drawLine(axisOrigin.getX(),0,axisOrigin.getX(),height); // draw all the elements except the selected one for (int i = 0; i < sourceDomain.dataSize(); i++) { if (i != selected) { g.setColor(Color.red); g.fillOval(axisOrigin.getX() + (int)(cacheX[i]*scale) - 2, axisOrigin.getY() - (int)(cacheY[i]*scale) - 2, 4, 4); } } // do selected item last so it isn't obscured if (selected >=0) { g.setColor(Color.green); g.fillOval(axisOrigin.getX() + (int)(cacheX[selected]*scale) - 2, axisOrigin.getY() - (int)(cacheY[selected]*scale) - 2, 4, 4); } } void loadData(int xAxisField, int yAxisField) { for (int i = 0; i < sourceDomain.dataSize(); i++) { cacheX[i] = sourceDomain.fieldAsReal(i,xAxisField); cacheY[i] = sourceDomain.fieldAsReal(i,yAxisField); } repaint(); } // accessing methods public SourceDomain sourceDomain() { return sourceDomain; } // updating methods public void itemSelected(int pos) { selected = pos; repaint(); } public void update(int pos) { selected = pos; repaint(); } public void setScale(double val) { scale = val; repaint(); } } // end StarFieldPanel