2013-02-23 16 views
-3

我嘗試運行下面的源代碼,但得到設置配置,同時保持的JPanel型

類型不匹配:不能從CustomJPan轉換的JPanel

錯誤。有人可以幫忙嗎?請原諒,我從頭頂開始。

public class rebuiltgui extends JApplet { 

    public void init() { 

    JPanel jpan = new CustomJPan();  
    } 
} 

class CustomJPan { 

    public JPanel CustomJPan() { 

    thispan = new JPanel(); 
    thispan.setBackground(Color.red); 
    return thispan; 
    } 

    public changeColour() { 

    // Change colour to blue here 
    } 
} 
+0

http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html – 2013-02-23 04:30:51

+0

對不起,我以爲我是子類(facepalm) – 2013-02-23 04:33:22

回答

2

試着這麼做

public class rebuiltgui extends JApplet { 

    public void init() { 

    JPanel jpan = new CustomJPan();  
    } 
} 

class CustomJPan extends JPanel { 

    public CustomJPan() { 
     super(); 
     setBackground(Color.red); 
    } 

    public void changeColour() { 

    // Change colour to blue here 
    } 
} 

我已經更改爲擴展JPanel

+0

太棒了!我沒有選擇在線,這真的讓我感到困擾。TYVM – 2013-02-23 05:00:40

+0

你是我最好的朋友 – 2013-02-23 05:45:48

2

因爲CustomJPan沒有擴展任何東西,所以你的代碼不會直接創建子類。相反,你似乎有一個與該類名稱相同的「僞」構造函數,CustomJPan試圖返回一些東西,並且當然你知道構造函數被聲明爲不返回任何東西。

如果你想子類,你必須擴展另一類。

public class CustomJPan extends JPanel { 

    // a real constructor has no return type! 
    public CustomJPan() { 
     // ....   
    } 

    // ... etc 
} 

子類化很好地覆蓋在任何Java的入門教材,你會很好地閱讀本章節。

一個告誡:除非你有明確的需求,例如希望改變一個類的固有行爲,特別是當你想要覆蓋方法時,你會希望避免子類化。

+0

對不起!我是C++的傢伙和OOP Swing有點新 – 2013-02-23 04:34:42

+0

@RolandSams:再次,你會想要閱讀這個文本,因爲它在這裏都有很好的解釋。 – 2013-02-23 04:35:36

+0

我只想要一個簡潔的方式來清理我的主要Java文件中的碎片(像設置組件屬性)我想隱藏其他類中的各種JPanels等 – 2013-02-23 04:39:54