Java:Tutorials:Graphics

From GPWiki

Graphics and Techniques

I find that the easiest way to implement graphics in a Java application is with the JFrame. I start by creating a shell which opens a window that we can draw onto. Start by importing java.awt.* java.awt.event.* and javax.swing.*.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*; 

Then make sure your class extends JFrame. Within the constructor call setVisible(true); and setSize(Xwidth,Ywidth);

public class simplegraphics extends JFrame
{
  public simplegraphics()
  {
    setVisible(true);
    setSize(300,200);
  }

Next you need a paint method.

public void paint(Graphics g)
  {
    //some code where painting occurs
  }

Then in your main method declare a new simplegraphics, and call the repaint function.

public static void main(String args[])
  {
    simplegraphics SG = new simplegraphics();
    SG.repaint();
  }
}

Painting

public void paint(Graphics g)
{
  g.translate(x,y); //Moves the origin 0,0 to this point.
  g.setColor(Color.red);//Color can be replaced by one of multiple 
                    //predefined color or created manualy.
                    //Such as  Color.blue Color.green or 
                    //new Color(Red_Amount,Green_Amount,Blue_Amount)
  g.drawLine(x,y,width,height);//their are more commands than whats shown here.
  g.drawRect(x,y,width,height);
  g.fillRect(x,y,width,height);
  g.drawOval(x,y,xRadius,yRadius);
  g.fillOval(x,y,xRadius,yRadius);
}

Technique/Animation

By making these changes or copying and pasting; this program is a demonstration on animating a ball bounce back and forth.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class simplegraphics extends JFrame
{
  int x=150,y=100,xdir=1,ydir=2 ;
  public simplegraphics()
  {
    boolean initial=true;
    setVisible(true);
    setSize(300,200);
  }
  public void paint(Graphics g)
  {
  	g.translate(0,25);//move origin down to compromise for the title bar
 
  	g.setColor(Color.white);               //background color
  	g.fillRect(0,0,getWidth(),getHeight());//background
 
  	g.setColor(Color.white);      //clears the old ball
  	g.fillOval(x,y,20,20);        
  	move();                       //updates the balls position
        g.setColor(Color.red);        //draws a new ball
  	g.fillOval(x,y,20,20);	
    
  }
  public void move()
  {
  	if(x<0||x>getWidth()-20)
  		xdir*=-1;
  	if(y<0||y>getHeight()-45)
  		ydir*=-1;
  	x+=xdir;
  	y+=ydir;
  }
  public static void main(String args[])
  {
    simplegraphics SG = new simplegraphics(); 
    int step=0;
    while(true)
    {
    	if(step%500000==0)//the number 500000 doesn't matter but a smaller number will make the
                          //animation, not the ball, speed up.
    	{
    		SG.repaint();
    	}
    	step++;
    }
  }
}

--techno 00:02, 24 May 2005 (EDT)