import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TestGraphics
{
public static void main ( String[] args )
{
JFrame frame = new JFrame ("Graphics Test");
DrawingPanel dPanel = new DrawingPanel();
frame.getContentPane().add(dPanel);
frame.setSize (800, 600);
frame.setLocation (40, 40);
frame.setVisible (true);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
}
class DrawingPanel extends JPanel
{
public void paintComponent ( Graphics g )
{
super.paintComponent ( g );
// Set the font
g.setFont (new Font("Serif", Font.BOLD, 20));
g.drawString ("Serif", 10, 30);
g.setFont (new Font("SansSerif", Font.ITALIC, 20));
g.drawString ("SansSerif", 150, 30);
g.setFont (new Font ("Monospaced", Font.PLAIN, 20));
g.drawString ("Monospaced", 300, 30);
// Draw lines to form a T
g.setColor (Color.red);
g.drawLine (10, 50, 100, 50);
g.setColor (Color.blue);
g.drawLine (55, 50, 55, 150);
// Draw rectangle and filled rounded square
g.setColor (Color.orange);
g.drawRect (150, 50, 50, 75);
g.fillRoundRect (300, 50, 50, 75, 20, 20);
// 3D: Draw filled rectangle and square
g.setColor (Color.green);
g.fill3DRect (10, 200, 50, 75, true);
g.draw3DRect (150, 200, 50, 50, true);
// Draw an open and a filled ellipse
g.setColor (Color.cyan);
g.drawOval (250, 200, 50, 75);
g.fillOval (350, 200, 50, 75);
// Draw an open and a filled circle
g.setColor (Color.magenta);
g.drawOval (10, 300, 75, 75);
g.fillOval (150, 300, 75, 75);
// Draw arc to represent a Pac man
g.setColor (Color.pink);
g.drawArc (250, 300, 50, 50, 30, 300);
g.fillArc (350, 300, 50, 50, 30, 300);
// Create a polygon
int[] xPoints = {10, 30, 40, 50, 70, 50, 40, 30};
int[] yPoints = {440, 430, 410, 430, 440, 450, 470, 450};
int nPoints = xPoints.length;
Polygon star = new Polygon (xPoints, yPoints, nPoints);
g.setColor (Color.yellow);
g.drawPolygon (star);
// Put a box around the polygon
g.setColor (Color.darkGray);
Rectangle bounds = star.getBounds();
g.drawRect (bounds.x, bounds.y, bounds.width, bounds.height);
// Set the clipping region
g.setClip (200, 400, 100, 100);
// Draw Pac-man in a 500 x 600 area
for (int i = 0; i < 500; i += 60)
for (int j = 0; j < 600; j += 60)
g.fillArc (i, j, // top left hand corner
50, 50, // width, height
30, 300); // start angle, sweep angle
}
}
This program shows how you can use the primitives to draw graphs.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DrawingGraph
{
public static void main ( String[] args )
{
JFrame frame = new JFrame ("Drawing a Graph");
DrawingPanel dPanel = new DrawingPanel();
frame.getContentPane().add(dPanel);
frame.setSize (800, 600);
frame.setLocation (40, 40);
frame.setVisible (true);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
}
class DrawingPanel extends JPanel
{
public void paintComponent ( Graphics g )
{
super.paintComponent ( g );
// Set up a Cartesian coordinate system
// get the size of the drawing area
Dimension size = this.getSize();
// place the origin at the middle
g.translate (size.width / 2, size.height / 2);
// draw the x and y axes
drawXYAxes (g);
graphLine (g, 0.5, 25.2);
graphQuadratic (g, -0.125, 0, 0);
}
private void drawXYAxes (Graphics g) {
Dimension size = this.getSize();
int hBound = size.width / 2;
int vBound = size.height / 2;
int tic = size.width / 100;
// draw the x-axis
g.drawLine (-hBound, 0, hBound, 0);
// draw the tic marks along the x axis
for (int k = -hBound; k <= hBound; k += 10)
g.drawLine (k, tic, k, -tic);
// draw the y-axis
g.drawLine (0, vBound, 0, -vBound);
// draw the tic marks along the y axis
for (int k = -vBound; k <= vBound; k += 10)
g.drawLine (-tic , k, +tic, k);
}
private void graphLine (Graphics g, double a, double b) {
Dimension size = this.getSize();
g.setColor (Color.red);
int x1 = size.width / 2;
int y1 = (int) ((a * x1) + b);
y1 = - y1;
int x2 = - x1;
int y2 = (int)((a * x2) + b);
y2 = - y2;
g.drawLine (x1, y1, x2, y2);
}
private void graphQuadratic (Graphics g, double a, double b, double c) {
Dimension size = this.getSize();
g.setColor (Color.blue);
int hBound = size.width / 2;
for (int i = -hBound; i <= hBound; i++) {
int x1 = i;
int y1 = (int) (a * x1 * x1 + b * x1 + c);
y1 = - y1;
int x2 = x1 + 1;
int y2 = (int) (a * x2 * x2 + b * x2 + c);
y2 = - y2;
g.drawLine (x1, y1, x2, y2);
}
}
}