View Single Post
  #6 (permalink)  
Old 04-25-2008, 01:58 AM
hardwired hardwired is online now
Senior Member
 
Join Date: Jul 2007
Posts: 1,143
hardwired is on a distinguished road
Code:
import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.Random; import javax.swing.*; public class SimTest implements ActionListener { Random seed = new Random(); JDialog dialog; public void actionPerformed(ActionEvent e) { int[] data = getData(); DataPanel dataPanel = new DataPanel(data); if(dialog == null) { dialog = new JDialog(new Frame(), "data plot", false); dialog.setSize(400,400); dialog.setLocationRelativeTo(null); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); } dialog.add(dataPanel); dialog.setVisible(true); } private int[] getData() { int[] data = new int[8]; for(int i = 0; i < data.length; i++) { data[i] = seed.nextInt(101); } return data; } private JPanel getContent() { JButton button = new JButton("test"); button.addActionListener(this); JPanel panel = new JPanel(new GridBagLayout()); panel.add(button, new GridBagConstraints()); return panel; } public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new SimTest().getContent()); f.setSize(200,75); f.setLocation(200,200); f.setVisible(true); } } class DataPanel extends JPanel { int[] data; final int PAD = 20; public DataPanel(int[] data) { this.data = data; } protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); int w = getWidth(); int h = getHeight(); // Draw ordinate. g2.draw(new Line2D.Double(PAD, PAD, PAD, h-PAD)); // Draw abcissa. g2.draw(new Line2D.Double(PAD, h-PAD, w-PAD, h-PAD)); double xInc = (double)(w - 2*PAD)/(data.length-1); double scale = (double)(h - 2*PAD)/getMax(); // Draw lines. g2.setPaint(Color.blue); for(int i = 0; i < data.length-1; i++) { double x1 = PAD + i*xInc; double y1 = h - PAD - scale*data[i]; double x2 = PAD + (i+1)*xInc; double y2 = h - PAD - scale*data[i+1]; g2.draw(new Line2D.Double(x1, y1, x2, y2)); } // Mark data points. g2.setPaint(Color.red); for(int i = 0; i < data.length; i++) { double x = PAD + i*xInc; double y = h - PAD - scale*data[i]; g2.fill(new Ellipse2D.Double(x-2, y-2, 4, 4)); } } private int getMax() { int max = -Integer.MAX_VALUE; for(int i = 0; i < data.length; i++) { if(data[i] > max) max = data[i]; } return max; } }
Reply With Quote