Java Programming Blue J 0_o
So i'm trying "trying" to code something which creates a House. Below is the method i'm trying to use, however i keep getting this error message "that the operator i've used here cannot be used for this type of value (the square 1 line gets highlighted). Why does this happen? Furthermore would i have to make a different constructor for each of the shape lines? if so can i differentiate between square 1 and 2 so the user can automatically (Without entering anything) can build the onewindowhouse?
Code java:
public void createOneWindowHouse(){
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
triangle1 = new Triangle(50, 150, 114, 40, "green");
square1.makeVisible();
square2.makeVisible();
triangle1.makeVisible();
}
Re: Java Programming Blue J 0_o
Quote:
i keep getting this error message
Please copy and post the full text of the error message.
Quote:
a different constructor for each of the shape lines
You would need to create a new instance of each of the lines by using the new statement with the class's constructor.
Quote:
differentiate between square 1 and 2
The variable names: square1 and square2 would allow you to differentiate between the two objects.
Re: Java Programming Blue J 0_o
Constructor Square in Square class cannot be applied to given types;
required:no arguments;
found:int,int,int,java.lang.string;
reason:actual and formal arguments differ in length
So for the second point, the below code would suffice for line one. I can't seem to replicate the second line in the same square class though.
Code java:
public Square()
{
size = 110;
xPosition = 60;
yPosition = 90;
color = "red";
isVisible = false;
}
Re: Java Programming Blue J 0_o
Quote:
required:no arguments;
Do you understand what that says? If you want to pass any arguments to the constructor you need to define a constructor to take what you want to pass.
Quote:
replicate the second line in the same square class
Can you explain where the first line is? How is a line defined in an instance of the Square class?
How would more than one line be defined in one instance of the class?
My understanding about a square is that it has 4 equal sides and a location. I have no idea where a line would be.
Re: Java Programming Blue J 0_o
Sorry for using 'line' i was meaning the second line in the onewindowhouse method.
basically how would i write the below method into the square class? so when the user starts the programme the 2 squares are placed with the specified attributes. (so the user doesn't have to input any values, if this can be achieved?)
i've only been at this for a few weeks, so forgive me for appearing to be slightly idiotic.
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
Re: Java Programming Blue J 0_o
Quote:
using 'line' i was meaning the second line in the onewindowhouse method.
Sorry, I don't know what you mean by a line when you are talking about a square.
What is the "first line" or a second line in a square?
Quote:
how would i write the below method into the square class
What you have posted looks like calls to the class's constructor, not to a method in the class.
See the tutorial about class constructors:
Providing Constructors for Your Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)
Quote:
the user doesn't have to input any values
Your posted code provides values to the Square class's constructor that the user did not enter:
Code :
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
Re: Java Programming Blue J 0_o
Code java:
public class MyPicture
{
private Square square1;
private Square square2;
private Square square3;
private Square square4;
private Circle circle1;
private Triangle triangle1;
/**
* Constructor for objects of class MyPicture
*
*/
/**
* Instantiates (creates) a new MyPicture object. This is a default constructor
* that only gives values to one of the object attributes - a circle
* @param y a sample parameter for a method
* @return the sum of x and y
*
*/
public MyPicture()
{ circle1 = new Circle();
circle1.changeColor("yellow");
circle1.makeVisible();
}
/**
* creates a one Window House
*/
public void createOneWindowHouse(){
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
triangle1 = new Triangle(50, 150, 114, 40, "green");
square1.makeVisible();
square2.makeVisible();
triangle1.makeVisible();
}
}
Code java:
public class Square
{
public int size;
public int xPosition;
public int yPosition;
public String color;
public boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square()
{
size = 110;
xPosition = 60;
yPosition = 90;
color = "red";
isVisible = false;
}
/**
* Make this square visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this square invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the square a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the square a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the square a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the square a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the square horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the square vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the square horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the square vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newSize)
{
erase();
size = newSize;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the square with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color,
new Rectangle(xPosition, yPosition, size, size));
canvas.wait(10);
}
}
/*
* Erase the square on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
The above is all the code that i'm using and getting the error already stated with. I don't know i'm lost, it's late, "sadface.jpg". I'll come back to this in the morning, but thanks for help man.
Re: Java Programming Blue J 0_o
Read the tutorial on how to write and use constructors.
Re: Java Programming Blue J 0_o
Re: Java Programming Blue J 0_o
Re: Java Programming Blue J 0_o
Hey, so new day new problem. I'm pretty sure i've gotten the constructors correct and i'm no longer getting the previous the error. However my code compiles without any error, but when i go and click on the void createOneWindowHouse (on the mypicture object) i get the error message below popping up.
Java.Lang.nullPointerException:
null;
Code java:
/**
* Write a description of class MyPicture here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class MyPicture
{
public Square square1;
private Square square2;
private Square square3;
private Square square4;
private Circle circle1;
private Triangle triangle1;
/**
* Constructor for objects of class MyPicture
*
*/
/**
* Instantiates (creates) a new MyPicture object. This is a default constructor
* that only gives values to one of the object attributes - a circle
* @param y a sample parameter for a method
* @return the sum of x and y
*
*/
public MyPicture()
{ circle1 = new Circle();
circle1.changeColor("yellow");
circle1.makeVisible();
}
/**
* creates a one Window House
*/
public void createOneWindowHouse(){
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
triangle1 = new Triangle(50, 150, 114, 40, "green");
square1.makeVisible();
square2.makeVisible();
triangle1.makeVisible();
}
}
Code java:
import javax.swing.*;
import java.awt.*;
import java.util.List;
import java.util.*;
/**
* Canvas is a class to allow for simple graphical drawing on a canvas.
* This is a modification of the general purpose Canvas, specially made for
* the BlueJ "shapes" example.
*
* @author: Bruce Quig
* @author: Michael Kölling (mik)
*
* @version: 1.6 (shapes)
*/
public class Canvas
{
// Note: The implementation of this class (specifically the handling of
// shape identity and colors) is slightly more complex than necessary. This
// is done on purpose to keep the interface and instance fields of the
// shape objects in this project clean and simple for educational purposes.
private static Canvas canvasSingleton;
/**
* Factory method to get the canvas singleton object.
*/
public static Canvas getCanvas()
{
if(canvasSingleton == null) {
canvasSingleton = new Canvas("BlueJ Shapes Demo", 300, 300,
Color.white);
}
canvasSingleton.setVisible(true);
return canvasSingleton;
}
// ----- instance part -----
private JFrame frame;
private CanvasPane canvas;
private Graphics2D graphic;
private Color backgroundColour;
private Image canvasImage;
private List objects;
private HashMap shapes;
/**
* Create a Canvas.
* @param title title to appear in Canvas Frame
* @param width the desired width for the canvas
* @param height the desired height for the canvas
* @param bgClour the desired background colour of the canvas
*/
private Canvas(String title, int width, int height, Color bgColour)
{
frame = new JFrame();
canvas = new CanvasPane();
frame.setContentPane(canvas);
frame.setTitle(title);
canvas.setPreferredSize(new Dimension(width, height));
backgroundColour = bgColour;
frame.pack();
objects = new ArrayList();
shapes = new HashMap();
}
/**
* Set the canvas visibility and brings canvas to the front of screen
* when made visible. This method can also be used to bring an already
* visible canvas to the front of other windows.
* @param visible boolean value representing the desired visibility of
* the canvas (true or false)
*/
public void setVisible(boolean visible)
{
if(graphic == null) {
// first time: instantiate the offscreen image and fill it with
// the background colour
Dimension size = canvas.getSize();
canvasImage = canvas.createImage(size.width, size.height);
graphic = (Graphics2D)canvasImage.getGraphics();
graphic.setColor(backgroundColour);
graphic.fillRect(0, 0, size.width, size.height);
graphic.setColor(Color.black);
}
frame.setVisible(visible);
}
/**
* Draw a given shape onto the canvas.
* @param referenceObject an object to define identity for this shape
* @param color the color of the shape
* @param shape the shape object to be drawn on the canvas
*/
// Note: this is a slightly backwards way of maintaining the shape
// objects. It is carefully designed to keep the visible shape interfaces
// in this project clean and simple for educational purposes.
public void draw(Object referenceObject, String color, Shape shape)
{
objects.remove(referenceObject); // just in case it was already there
objects.add(referenceObject); // add at the end
shapes.put(referenceObject, new ShapeDescription(shape, color));
redraw();
}
/**
* Erase a given shape's from the screen.
* @param referenceObject the shape object to be erased
*/
public void erase(Object referenceObject)
{
objects.remove(referenceObject); // just in case it was already there
shapes.remove(referenceObject);
redraw();
}
/**
* Set the foreground colour of the Canvas.
* @param newColour the new colour for the foreground of the Canvas
* error message popping up on this code, jumps to this each time i try to run the createOneWindoeHouse method.
*/
public void setForegroundColor(String colorString)
{
if(colorString.equals("red"))
graphic.setColor(Color.red);
else if(colorString.equals("black"))
graphic.setColor(Color.black);
else if(colorString.equals("blue"))
graphic.setColor(Color.blue);
else if(colorString.equals("yellow"))
graphic.setColor(Color.yellow);
else if(colorString.equals("green"))
graphic.setColor(Color.green);
else if(colorString.equals("magenta"))
graphic.setColor(Color.magenta);
else if(colorString.equals("white"))
graphic.setColor(Color.white);
else
graphic.setColor(Color.black);
}
/**
* Wait for a specified number of milliseconds before finishing.
* This provides an easy way to specify a small delay which can be
* used when producing animations.
* @param milliseconds the number
*/
public void wait(int milliseconds)
{
try
{
Thread.sleep(milliseconds);
}
catch (Exception e)
{
// ignoring exception at the moment
}
}
/**
* Redraw ell shapes currently on the Canvas.
*/
private void redraw()
{
erase();
for(Iterator i=objects.iterator(); i.hasNext(); ) {
((ShapeDescription)shapes.get(i.next())).draw(graphic);
}
canvas.repaint();
}
/**
* Erase the whole canvas. (Does not repaint.)
*/
private void erase()
{
Color original = graphic.getColor();
graphic.setColor(backgroundColour);
Dimension size = canvas.getSize();
graphic.fill(new Rectangle(0, 0, size.width, size.height));
graphic.setColor(original);
}
/************************************************************************
* Inner class CanvasPane - the actual canvas component contained in the
* Canvas frame. This is essentially a JPanel with added capability to
* refresh the image drawn on it.
*/
private class CanvasPane extends JPanel
{
public void paint(Graphics g)
{
g.drawImage(canvasImage, 0, 0, null);
}
}
/************************************************************************
* Inner class CanvasPane - the actual canvas component contained in the
* Canvas frame. This is essentially a JPanel with added capability to
* refresh the image drawn on it.
*/
private class ShapeDescription
{
private Shape shape;
private String colorString;
public ShapeDescription(Shape shape, String color)
{
this.shape = shape;
colorString = color;
}
public void draw(Graphics2D graphic)
{
setForegroundColor(colorString);
graphic.fill(shape);
}
}
}
Code java:
import java.awt.*;
/**
* A triangle that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (15 July 2000)
*/
public class Triangle
{
private int height;
private int width;
private int xPosition;
private int yPosition;
private String color;
private boolean isVisible;
/**
* Create a new triangle at default position with default color.
*/
public Triangle(int height, int width, int x, int y, String color)
{
height = 50;
width = 150;
xPosition = 114;
yPosition = 40;
color = "green";
isVisible = false;
}
/**
* Make this triangle visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this triangle invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the triangle a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the triangle a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the triangle a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the triangle a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the triangle horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the triangle vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the triangle horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the triangle vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newHeight, int newWidth)
{
erase();
height = newHeight;
width = newWidth;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the triangle with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
int[] xpoints = { xPosition, xPosition + (width/2), xPosition - (width/2) };
int[] ypoints = { yPosition, yPosition + height, yPosition + height };
canvas.draw(this, color, new Polygon(xpoints, ypoints, 3));
canvas.wait(10);
}
}
/*
* Erase the triangle on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Code java:
import java.awt.*;
/**
* A square that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (15 July 2000)
*/
public class Square
{
public int size;
public int xPosition;
public int yPosition;
public String color;
public boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square()
{
size = 110;
xPosition = 60;
yPosition = 90;
isVisible = false;
color = "red";
}
public Square(int size, int x, int y, String color)
{
size= 30;
xPosition = 70;
yPosition = 110;
isVisible = false;
color = "blue";
}
/**
* Make this square visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this square invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the square a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the square a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the square a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the square a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the square horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the square vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the square horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the square vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newSize)
{
erase();
size = newSize;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the square with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color,
new Rectangle(xPosition, yPosition, size, size));
canvas.wait(10);
}
}
/*
* Erase the square on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Code java:
import java.awt.*;
import java.awt.geom.*;
/**
* A circle that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (15 July 2000)
*/
public class Circle
{
private int diameter;
private int xPosition;
private int yPosition;
private String color;
private boolean isVisible;
/**
* Create a new circle at default position with default color.
*/
public Circle()
{
diameter = 30;
xPosition = 20;
yPosition = 60;
color = "blue";
isVisible = false;
}
/**
* Make this circle visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this circle invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the circle a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the circle a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the circle a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the circle a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the circle horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the circle vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the circle horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the circle vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newDiameter)
{
erase();
diameter = newDiameter;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the circle with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color, new Ellipse2D.Double(xPosition, yPosition,
diameter, diameter));
canvas.wait(10);
}
}
/*
* Erase the circle on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
All the code i've used is above.
Re: Java Programming Blue J 0_o
Quote:
i get the error message below popping up.
You need to be sure the full text of the error message is displayed by calling the printStackTrace() method in the catch block. The error message will show the line number where the error happened.
Quote:
Java.Lang.nullPointerException:
You should copy and paste the full text of the error message. What you posted is NOT the correct text from the message. The spelling is wrong. The correct spelling:
Quote:
java.lang.NullPointerException
You should copy and paste, not make it up.
A NullPointerException happens when a statement with a variable with a null value is executed. Look at the error message, find the line number and then look at that statement and find what variable has a null value. Then backtrack in the code to see why that variable does not have a valid non-null value.
Re: Java Programming Blue J 0_o
I wouldn't know how to do use the printStackTrace() in bluej.
Code java:
if(colorString.equals("red"))
It highlights this bit of code each time the error happens.
--- Update ---
Code java:
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:185)
at Square.makeVisible(Square.java:46)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:185)
at Square.makeVisible(Square.java:46)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:185)
at Square.makeVisible(Square.java:46)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:44)
java.lang.NullPointerException
at MyPicture.<init>(MyPicture.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at bluej.runtime.ExecServer$3.run(ExecServer.java:741)
java.lang.NullPointerException
at MyPicture.<init>(MyPicture.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at bluej.runtime.ExecServer$3.run(ExecServer.java:741)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:46)
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
at Canvas$ShapeDescription.draw(Canvas.java:216)
at Canvas.redraw(Canvas.java:167)
at Canvas.draw(Canvas.java:104)
at Square.draw(Square.java:187)
at Square.makeVisible(Square.java:48)
at MyPicture.createOneWindowHouse(MyPicture.java:46)
this is the error in the console that appears.
Re: Java Programming Blue J 0_o
Quote:
java.lang.NullPointerException
at Canvas.setForegroundColor(Canvas.java:124)
Look at line 124 in the Canvas class, find the variable with the null value and then backtrack in the code to find out why that variable does not have a non-null value.
Where is the Canvas class defined? Java SE has a class by that name. Your class should NOT use the same name as the Java SE class because that is confusing for anyone reading the code.
Quote:
how to do use the printStackTrace() in bluej.
That method belongs to the object passed to the catch block. You need to call it in the catch block. There should be thousands of code samples if you do a search.
Re: Java Programming Blue J 0_o
Is there a way to quickly select line 124?
Re: Java Programming Blue J 0_o
Your IDE should help you know which line of a program you are looking at.
Re: Java Programming Blue J 0_o
Sorry i thought i had copied it already, this is the code that it highlights for me
Code java:
if(colorString.equals("red"))
graphic.setColor(Color.red);
--- Update ---
I used a
It now instead of creating anything highlights that in the canvas class.
--- Update ---
So some progress finally.
I'm getting the squares and triangle to appear, however the sizes and color are still incorrect 0_o. It seems that using this.size ect seems to help.
Code java:
public class Square
{
public int size;
public int xPosition;
public int yPosition;
public String color;
public boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square()
{
this.size = 110;
this.xPosition = 60;
this.yPosition = 90;
this.color = "red";
this.isVisible = false;
}
public Square(int size, int x, int y, String color)
{
this.size= 30;
this. xPosition = x;
this. yPosition = y;
this.isVisible = false;
this.color = "color";
}
/**
* Make this square visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this square invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the square a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the square a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the square a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the square a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the square horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the square vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the square horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the square vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newSize)
{
erase();
size = newSize;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the square with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color,
new Rectangle(xPosition, yPosition, size, size));
canvas.wait(10);
}
}
/*
* Erase the square on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Code java:
import java.awt.*;
import java.awt.geom.*;
/**
* A circle that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (15 July 2000)
*/
public class Circle
{
private int diameter;
private int xPosition;
private int yPosition;
private String color;
private boolean isVisible;
/**
* Create a new circle at default position with default color.
*/
public Circle()
{
this.diameter = 30;
this.xPosition = 20;
this.yPosition = 60;
this.color = "blue";
this.isVisible = false;
}
/**
* Make this circle visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this circle invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the circle a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the circle a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the circle a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the circle a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the circle horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the circle vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the circle horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the circle vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newDiameter)
{
erase();
diameter = newDiameter;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the circle with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.draw(this, color, new Ellipse2D.Double(xPosition, yPosition,
diameter, diameter));
canvas.wait(10);
}
}
/*
* Erase the circle on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Code java:
import java.awt.*;
/**
* A triangle that can be manipulated and that draws itself on a canvas.
*
* @author Michael Kölling and David J. Barnes
* @version 1.0 (15 July 2000)
*/
public class Triangle
{
private int height;
private int width;
private int xPosition;
private int yPosition;
private String color;
private boolean isVisible;
/**
* Create a new triangle at default position with default color.
*/
public Triangle(int height, int width, int x, int y, String color)
{
this.height = height;
this.width = width;
this.xPosition = x;
this.yPosition = y;
this. color = "color";
this.isVisible = false;
}
/**
* Make this triangle visible. If it was already visible, do nothing.
*/
public void makeVisible()
{
isVisible = true;
draw();
}
/**
* Make this triangle invisible. If it was already invisible, do nothing.
*/
public void makeInvisible()
{
erase();
isVisible = false;
}
/**
* Move the triangle a few pixels to the right.
*/
public void moveRight()
{
moveHorizontal(20);
}
/**
* Move the triangle a few pixels to the left.
*/
public void moveLeft()
{
moveHorizontal(-20);
}
/**
* Move the triangle a few pixels up.
*/
public void moveUp()
{
moveVertical(-20);
}
/**
* Move the triangle a few pixels down.
*/
public void moveDown()
{
moveVertical(20);
}
/**
* Move the triangle horizontally by 'distance' pixels.
*/
public void moveHorizontal(int distance)
{
erase();
xPosition += distance;
draw();
}
/**
* Move the triangle vertically by 'distance' pixels.
*/
public void moveVertical(int distance)
{
erase();
yPosition += distance;
draw();
}
/**
* Slowly move the triangle horizontally by 'distance' pixels.
*/
public void slowMoveHorizontal(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
xPosition += delta;
draw();
}
}
/**
* Slowly move the triangle vertically by 'distance' pixels.
*/
public void slowMoveVertical(int distance)
{
int delta;
if(distance < 0)
{
delta = -1;
distance = -distance;
}
else
{
delta = 1;
}
for(int i = 0; i < distance; i++)
{
yPosition += delta;
draw();
}
}
/**
* Change the size to the new size (in pixels). Size must be >= 0.
*/
public void changeSize(int newHeight, int newWidth)
{
erase();
height = newHeight;
width = newWidth;
draw();
}
/**
* Change the color. Valid colors are "red", "yellow", "blue", "green",
* "magenta" and "black".
*/
public void changeColor(String newColor)
{
color = newColor;
draw();
}
/*
* Draw the triangle with current specifications on screen.
*/
private void draw()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
int[] xpoints = { xPosition, xPosition + (width/2), xPosition - (width/2) };
int[] ypoints = { yPosition, yPosition + height, yPosition + height };
canvas.draw(this, color, new Polygon(xpoints, ypoints, 3));
canvas.wait(10);
}
}
/*
* Erase the triangle on screen.
*/
private void erase()
{
if(isVisible) {
Canvas canvas = Canvas.getCanvas();
canvas.erase(this);
}
}
}
Re: Java Programming Blue J 0_o
Did you find what variable had the null value and then change the code so it would not have a null value?
Quote:
the sizes and color are still incorrect
What size and color is the code using? Where does it get those values from? What values do you expect for those two variables?
Re: Java Programming Blue J 0_o
yea it was the color value, so i changed it to "red", "green" ect. That problem seems to have been solved anyway. Now my problem seems to be actually getting the program to not pick just the second constructor of the square code below.
Code java:
public class Square
{
public int size;
public int xPosition;
public int yPosition;
public String color;
public boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square()
{
this.size = 110;
this.xPosition = 60;
this.yPosition = 90;
this.color = "red";
this.isVisible = false;
}
public Square(int size, int x, int y, String color)
{
this.size= 30;
this. xPosition = x;
this. yPosition = y;
this.isVisible = false;
this.color = "blue";
}
--- Update ---
it's just taking the second square constructor, the public Square (int size, int x, int y, string color)
Code java:
public class Square
{
public int size;
public int xPosition;
public int yPosition;
public String color;
public boolean isVisible;
/**
* Create a new square at default position with default color.
*/
public Square()
{
size = 110;
xPosition = 60;
yPosition = 90;
color = "red";
isVisible = false;
}
public Square(int size, int x, int y, String color)
{
this.size= 30;
this. xPosition = 70;
this. yPosition = 110;
this.isVisible = false;
this.color = "blue";
}
Re: Java Programming Blue J 0_o
Quote:
getting the program to not pick just the second constructor of the square code below.
The compiler will pick the constructor that matches the arguments used in the new statement.
If you want a different constructor to be called, change the arguments in the new statement and add a constructor to the class that has those args.
There is a conceptual problem with the way the second constructor is coded. It is ignoring ALL the arguments that are passed to it and uses hardcoded literals. It should be saving the args that are passed to it in the class variables so that each new object has the values passed to it by the caller.
Re: Java Programming Blue J 0_o
So i have to change the second constructor in the Square class?
Re: Java Programming Blue J 0_o
Yes, that constructor should use the args passed to it to define the values in the object being created.
Re: Java Programming Blue J 0_o
Do i need to add anything else to the MyPicture class? or should i keep each constructor separated in their own shape class?
Re: Java Programming Blue J 0_o
Quote:
Do i need to add anything else to the MyPicture class?
That depends on what the class is supposed to do.
Quote:
should i keep each constructor separated in their own shape class?
I'm not sure what you are asking. Each class needs some constructors so that it can be used as needed. The number of constructors depends on what the class is used for.
Re: Java Programming Blue J 0_o
The class is supposed to allow for methods to be run of it so a picture can be drawn. I'm still getting the same problem, i can't seem to figure out how to separate 2 constructors in the same Square class, so that the mypicture class can have on method created to allow for a house to be drawn.
--- Update ---
This is the instruction i have to carry out. It's annoying because once i have this down i can get the rest of the excercise done in time for tommorow because it's all just the same adding new methods.
"Our new class doesn’t draw very much. We can change that by adding the following method:
Code java:
/**
* Builds a house with 1 window on the canvas.
* In order to do this it has to instantiate (gives initial values)
* to some of its attributes.
* This is done by using constructors from the appropriate classes.
* These shape objects are then made visible by using their classes'
* makeVisible() methods.
*/
public void createOneWindowHouse(){
square1 = new Square(110, 60, 90, "red");
square2 = new Square(30, 70, 110, "blue");
triangle1 = new Triangle(50, 150, 114, 40, "green");
square1.makeVisible();
square2.makeVisible();
triangle1.makeVisible();
}
This method will only compile and work if you have appropriate constructors in the Square and Triangle classes. If you don’t, add them to the relevant classes. Notes from lab 2 should help. The values given as parameters should give you a house. The order for the parameters is as follows:
Square: size, xPosition, yPosition, color
Triangle: height, width, xPosition, yPosition, color
If not already there, add the appropriate constructors to the Square & Triangle classes.
Add the above class, with comments, to the new class.
Compile
Test
--- Update ---
To add pressure to pressure already, if i don't nail this i'll fail my course 0_o literally fail it.