所以这里是课堂和超级课程,需要遵循的问题:
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());
}
}
在TestDraw类中,我试图将MyShape中的toString放入窗口的文本框中,但是当我执行“JLabel southLabel = new JLabel(toString());”时它告诉我toString()需要是静态的。这一切都很好和花花公子,除非你使toString静态,它想让该字符串中的获取静态,这是坏的......任何想法?
我已经尝试将toString()放在超类中,但它给出了同样的问题,尝试问老师,但他说“看书”嗯......已经读了两个小时了,我已经在我第三次阅读之后找到一个例子。
提前谢谢!
PS:答案很好,但首选解释!
答案 0 :(得分:3)
制作班级的实例。
TestDraw testDraw = new TestDraw();
并在其上调用toString()方法。
在main方法中,您处于静态上下文中 - 也就是说,您没有TestDraw类型的对象,这也意味着您没有任何字段或方法。
答案 1 :(得分:1)
这是因为您在静态方法(主要)中调用非静态方法。那不行。你需要做的是实例化一个这样的Test Draw对象:
TestDraw testDraw = new TestDraw();
JLabel southLabel = new JLabel(testDraw.toString());