如何将子类方法放入超类JLabel中?

时间:2009-11-12 19:38:35

标签: java subclass tostring superclass

所以这里是课堂和超级课程,需要遵循的问题:

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:答案很好,但首选解释!

2 个答案:

答案 0 :(得分:3)

制作班级的实例。
TestDraw testDraw = new TestDraw();
并在其上调用toString()方法。 在main方法中,您处于静态上下文中 - 也就是说,您没有TestDraw类型的对象,这也意味着您没有任何字段或方法。

答案 1 :(得分:1)

这是因为您在静态方法(主要)中调用非静态方法。那不行。你需要做的是实例化一个这样的Test Draw对象:

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