import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JOptionPane;
import java.util.*;
import java.io.*;
import javax.swing.Timer;
public class PaintDemo1 extends JFrame implements ActionListener
{
private FountainAnimator animator;
private Timer timer;
private JScrollPane jsp;
public PaintDemo1()
{
setVisible(true);
animator = new FountainAnimator();
animator.setVisible(true);
timer = new Timer(1000, animator);
timer.setDelay(1000);
timer.start();
Graphics graphics = getGraphics();
jsp = new JScrollPane(animator, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
Dimension d = new Dimension(9000,9000);
animator.setPreferredSize(d);
animator.revalidate();
animator.setSize(d);
animator.setAutoscrolls(true);
setContentPane(jsp);
}
public static void main(String[] args)
{
PaintDemo1 pd1 = new PaintDemo1();
pd1.setVisible(true);
}
public class FountainAnimator extends JPanel implements ActionListener
{
public FountainAnimator()
{
super(new BorderLayout());
setBackground(Color.GREEN);
}
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(new Color(88,88,88));
Polygon poly = new Polygon();
poly.addPoint(200, 200);
poly.addPoint(400, 200);
poly.addPoint(400, 300);
poly.addPoint(100, 300);
g.fillPolygon(poly);
g.setColor(Color.BLACK);
g.drawPolygon(poly);
Polygon poly2 = new Polygon();
poly2.addPoint(200, 200);
poly2.addPoint(250, 100);
poly2.addPoint(450, 110);
poly2.addPoint(400, 200);
g.setColor(Color.BLUE);
g.fillPolygon(poly2);
g.setColor(Color.BLACK);
g.drawLine(200, 200, 250, 100);
g.drawLine(250, 100, 450, 110);
g.drawLine(450, 110, 400, 200);
Polygon poly3 = new Polygon();
poly3.addPoint(100, 300);
poly3.addPoint(100, 200);
poly3.addPoint(250, 100);
poly3.addPoint(200, 200);
g.setColor(new Color (88, 88,88));
g.fillPolygon(poly3);
g.setColor(Color.BLACK);
g.drawLine(100, 300, 100, 200);
g.drawLine(100, 200, 250, 100);
Polygon poly4 = new Polygon();
g.setColor(new Color(88,88,88));
poly4.addPoint(450, 110);
poly4.addPoint(510, 270);
poly4.addPoint(400,300);
poly4.addPoint(400, 200);
g.fillPolygon(poly4);
g.setColor(Color.BLACK);
g.drawPolygon(poly4);
drawSidewalk(g);
drawFountain(g);
animateFountain(g);
drawLake(g);
g.fillOval(8000,300, 100,100);
}
public void drawFountain(Graphics g)
{
g.setColor(new Color(95,95,95));
g.drawOval(300, 120, 65, 65);
g.setColor(Color.BLACK);
g.drawOval(320, 140, 25, 25);
g.setColor(new Color(95,95,95));
g.fillOval(320, 140, 25, 25);
g.setColor(new Color(50,50,50));
Polygon poly = new Polygon();
poly.addPoint(325, 153);
poly.addPoint(325, 125);
poly.addPoint(330, 115);
poly.addPoint(340, 125);
poly.addPoint(340, 153);
g.fillPolygon(poly);
g.setColor(Color.BLACK);
g.drawPolygon(poly);
}
public void drawSidewalk(Graphics g)
{
g.setColor(new Color(183,183,183));
g.fill3DRect(100,50,420,300,true);
}
public void animateFountain(Graphics g)
{
int newRed = Color.BLUE.getRed() + 10;
int newGreen = Color.BLUE.getGreen() + 10;
int newBlue = Color.BLUE.getBlue();
g.setColor(new Color(newRed, newGreen, newBlue));
for (int x = 325; x < 352; x++)
{
for (int y = 125; y < 155; y++)
{
g.setColor(new Color(newRed, newGreen, newBlue));
g.fillOval(x,y, 10, 10);
g.setColor(Color.BLACK);
g.drawOval(x,y,10,10);
}
}
// repaint();
}
public void drawLake(Graphics g)
{
g.setColor(new Color(9,34, 136));
g.fillOval(500,500, 300, 200);
g.setColor(Color.BLACK);
g.drawOval(500,500,300,200);
}
public void actionPerformed(ActionEvent e)
{
animator.repaint();
System.out.println("Executed now");
timer.restart();
}
}
public void actionPerformed(ActionEvent e)
{
// animator.repaint();
// Do I even need this listener?
}
public abstract class MyGraphics extends Graphics
{
}
}