import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JPanel;
import javax.swing.*;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.*;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Rectangle2D;


public class Application {
	
	public static void main(String [] args) {
		Application test = new Application();
	}
	
	public Application() {			
		
		JFrame frame = new JFrame();
		PlotView pv = new PlotView();
		JScrollPane scrolledPane = new JScrollPane(pv);
		scrolledPane.getViewport().setBackingStoreEnabled(true);

		frame.getContentPane().add(scrolledPane);
		
		frame.setSize(400,400);
		frame.setVisible(true);
		
		frame.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				JFrame f = (JFrame) e.getSource();
				f.setVisible(false);
				f.dispose();
				System.exit(0);
			}
		});
	}
}	
	
class PlotView extends JPanel {
	Dimension _size = new Dimension(1000,1000);
	Rectangle2D.Double _rect = new Rectangle2D.Double(100,100,300,300);
	
	public PlotView() {
		super();
	}
	
	public Dimension getPreferredSize() {
		return _size;
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		long start = System.currentTimeMillis();
		
		Graphics2D g2d = (Graphics2D) g;
		
		for (int i=0; i < 1000; i++) {
			_rect.setRect(Math.random() * 400,Math.random() * 400,100,100);
			g2d.setPaint(new Color((int) (Math.random()*255), (int) (Math.random()*255), (int) (Math.random()*255)));

			
			g2d.fill(_rect);
			g2d.setPaint(Color.black);

			g2d.draw(_rect);
			
		}
		System.out.println(System.currentTimeMillis()-start);
	}
}