2009-11-12 51 views
1

因此,這裏的類和超類,問題如下:如何將子類方法放入超類JLabel中?

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,我試圖把的toString從MyShape放到窗口的文本框中,但是當我做了「JLabel southLabel = new JLabel(toString());」它告訴我的toString()需要是靜態的。這一切都很好,除了當你讓toString靜態時,它想讓這個字符串中的gets爲靜態的,這是不好的......任何想法?

我試過在超類中放入toString(),但它給出了同樣的問題,試過問老師,但他說「看書」呃...已經兩個小時的閱讀章節,我還沒有找到第三次閱讀後的例子。

預先感謝您!

PS:答案很好,但解釋是首選!

回答

3

製作你的班級的一個實例。
TestDraw testDraw = new TestDraw();
並在其上調用toString()方法。 雖然在主要方法中,您處於靜態上下文中 - 也就是說,您沒有TestDraw類型的對象,這也意味着您沒有任何字段或方法。

1

這是因爲你在靜態方法(main)中調用非靜態方法。這不會奏效。你需要做的是實例化一個像這樣的TestDraw對象:

TestDraw testDraw = new TestDraw(); 
JLabel southLabel = new JLabel(testDraw.toString()); 
相關問題