teaching machines

CS 145 Lecture 25 – Shape Plotter

Agenda

  • program this
  • a Point class
  • the problem with arrays
  • a growable array of Points
  • ArrayList

Program This

You have:

  • A list of points/vertices of a polygon.
  • The ability to draw lines.

How do you draw the polygon?

Code

Point.java

package prefinal;

public class Point {

  private int x;
  private int y;
  
  public Point(int x,
               int y) {
    this.x = x;
    this.y = y;
  }

  public int getX() {
    return x;
  }

  public int getY() {
    return y;
  }
}

ZaboomafuCanvas.java

package prefinal;

import java.awt.Graphics;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ZaboomafuCanvas extends JPanel {

  private GrowablePointArray points;

  public ZaboomafuCanvas(GrowablePointArray points) {
    this.points = points;
  }

  protected void paintComponent(Graphics g) {
    for (int i = 0; i < points.size() - 1; ++i) {
      drawLineBetween(g, points.get(i), points.get(i + 1));
    }
    drawLineBetween(g, points.get(0), points.get(points.size() - 1));
  }

  private void drawLineBetween(Graphics g,
                               Point a,
                               Point b) {
    g.drawLine(a.getX(), a.getY(), b.getX(), b.getY());
  }

  public static void main(String[] args) throws FileNotFoundException {
    JFrame frame = new JFrame();

    // Point[] points = {
    // new Point(50, 100),
    // new Point(100, 100),
    // new Point(75, 0),
    // };

    Scanner in = new Scanner(new File("/home/user/rectangle.txt"));
//    int nPoints = 0;
//    Point[] points = new Point[
    GrowablePointArray points = new GrowablePointArray();
    
    while (in.hasNextInt()) {
      int x = in.nextInt();
      int y = in.nextInt();
      Point point = new Point(x, y);
//      points[nPoints] = point;
//      ++nPoints;
      points.add(point);
    }

    frame.add(new ZaboomafuCanvas(points));

    frame.setSize(200, 200);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

Haiku

Hide that ugly stuff.
The less you see the better.
Bologna’s that way.

 

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *