views:

143

answers:

2

So here's the class and the super class, question to follow:

TestDraw:

package project3;

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestDraw extends MyShape
{
    public static void main(String[] args) 
    {
     DrawPanel panel = new DrawPanel();
     JFrame application = new JFrame();



     application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     application.add(panel);
     application.setSize(300,300);
     application.setVisible(true); 
     JLabel southLabel = new JLabel(toString());
     application.add(southLabel, BorderLayout.SOUTH);
    }
}

MyShape:

package project3;

import java.awt.Color;

public class MyShape 
{
    private int x1, y1, x2, y2;
    private Color myColor;
    public MyShape()
    {
     setX1(1);
     setY1(1);
     setX2(1);
     setY2(1);
     setMyColor(Color.BLACK);
    }
    public MyShape(int x1, int y1, int x2, int y2, Color myColor)
    {
     setX1(x1);
     setY1(y1);
     setX2(x2);
     setY2(y2);
     setMyColor(myColor);
    }
    public void setX1(int x1)
    {
     if(x1 >= 0 && x1 <= 300)
     {
      this.x1 = x1;
     }
     else
     {
      this.x1 = 0;
     }
    }
    public int getX1()
    {
     return x1;
    }
    public void setY1(int y1)
    {
     if(y1 >= 0 && y1 <= 300)
     {
      this.y1 = y1;
     }
     else
     {
      this.y1 = 0;
     }
    }
    public int getY1()
    {
     return y1;
    }
    public void setX2(int x2)
    {
     if(x2 >= 0 && x2 <= 300)
     {
      this.x2 = x2;
     }
     else
     {
      this.x2 = 0;
     }
    }
    public int getX2()
    {
     return x2;
    }
    public void setY2(int y2)
    {
     if(y2 >= 0 && y2 <= 300)
     {
      this.y2 = y2;
     }
     else
     {
      this.y2 = 0;
     }
    }
    public int getY2()
    {
     return y2;
    }
    public void setMyColor(Color myColor)
    {
     this.myColor = myColor;
    }
    public Color getMyColor()
    {
     return myColor;
    }
    public String toString()
    {
     return String.format("X1: %d, X2: %d, Y1: %d, Y2: %d, Color: %s", getX1(), getX2(),
       getY1(), getY2(), getMyColor());
    }
}

In the class TestDraw, I was trying to put the toString from MyShape into a text box on a window, but when I did the "JLabel southLabel = new JLabel(toString());" it told my toString() needs to be static. That's all fine and dandy except when you make toString static it wants to make the gets in that string static, which is bad...any ideas?

I've tried putting the toString() in the superclass but it gives the same issue, tried asking the teacher but he says "Look in the book" Well...been two hours of reading the chapter and I've yet to find an example after my third read through.

Thank you in advance!

PS: Answer is nice, but explanation is preferred!

+3  A: 

Make an instance of your class.
TestDraw testDraw = new TestDraw();
and call the toString() method on it. While in the main method, you are in a static context - that is, you don't have an object of type TestDraw, which also means you don't have any of its fields or methods.

Bozho
+1  A: 

This is because you call a nonstatic method within a static one (main). That ain't gonna work. What you need to do instead is to instantiate a TestDraw object like this:

TestDraw testDraw = new TestDraw();
JLabel southLabel = new JLabel(testDraw.toString());
quosoo