import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.text.*; public class LissajousPlotPanel extends JPanel { double [] X, Y; double a, b; double xLo, xHi, yLo, yHi, tickInterval; public void paintComponent(Graphics g) { g.setFont( new Font( "SansSerif", Font.BOLD, 12 ) ); super.paintComponent(g); //otherwise add to existing grid //seems to have no effect??? i.e. always cleared int w=getWidth(); //panel size int h=getHeight(); double xWidth = xHi - xLo; //user grid size double yHeight = yHi - yLo; double xScale = w / xWidth; //scale user to panel double yScale = h / yHeight; double xOffset = xLo * xScale; double yOffset = yLo * yScale; DecimalFormat d3; d3 = new DecimalFormat ("0.000"); g.setColor(Color.WHITE); g.fillRect(0,0,w,h); g.setColor(Color.BLACK); int xAxis = (int)(h+yOffset); int yAxis = (int)(-xOffset); //g.drawLine(0,xAxis,w,xAxis ); //x axis //g.drawLine(yAxis,0,yAxis,h); //y axis /*for (double tick=tickInterval; tick<=xHi; tick+=tickInterval) { g.setColor(Color.LIGHT_GRAY); g.drawLine((int)(tick * xScale - xOffset),0,(int)(tick * xScale - xOffset),h); g.setColor(Color.BLACK); g.drawLine((int)(tick * xScale - xOffset),xAxis-3,(int)(tick * xScale - xOffset),xAxis+3); } for (double tick=-tickInterval; tick>=xLo; tick-=tickInterval) { g.setColor(Color.LIGHT_GRAY); g.drawLine((int)(tick * xScale - xOffset),0,(int)(tick * xScale - xOffset),h); g.setColor(Color.BLACK); g.drawLine((int)(tick * xScale - xOffset),xAxis-3,(int)(tick * xScale - xOffset),xAxis+3); } for (double tick=tickInterval; tick<=yHi; tick+=tickInterval) { g.setColor(Color.LIGHT_GRAY); g.drawLine(0,h-(int)(tick * yScale - yOffset), w,h-(int)(tick * yScale - yOffset)); g.setColor(Color.BLACK); g.drawLine(yAxis-3,h-(int)(tick * yScale - yOffset),yAxis+3,h-(int)(tick * yScale - yOffset)); } for (double tick=-tickInterval; tick>=yLo; tick-=tickInterval) { g.setColor(Color.LIGHT_GRAY); g.drawLine(0,h-(int)(tick * yScale - yOffset), w,h-(int)(tick * yScale - yOffset)); g.setColor(Color.BLACK); g.drawLine(yAxis-3,h-(int)(tick * yScale - yOffset),yAxis+3,h-(int)(tick * yScale - yOffset)); } */ int x, y, x2, y2; //g.setColor(Color.RED); g.setColor(Color.BLACK); x = (int)(X[0] * xScale - xOffset); y = h - (int)(Y[0] * yScale - yOffset); for (int i=1; i