2012-07-19 70 views
0

在下面的代碼示例中,我應該給變量label添加什麼修飾符? 我是Java新手,但我想要做的第一件事就是分解所有可以像JLabel一樣使用的類,並使其可以動態調用。我希望我在下面做了。但是,我不確定private static JLabel label;,因爲我最終希望能夠在某個主文件中聲明所有的swing類。謝謝。在這個代碼示例中,我應該給什麼修飾符一個變量?

package base; 

import java.awt.Component; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class CreateLabel extends JLabel { 
    private static final long serialVersionUID = 1L; 
    private static JLabel label; 

    public Component createLabel(JFrame frame, String text) { 
     label = new JLabel(text); 
     return frame.getContentPane().add(label); 
    } 
} 
+0

只要公開和靜態是好的,如果你打算從其他類初始化它。你可以使用setter方法,但它毫無意義。 – tommo 2012-07-19 23:45:41

+3

爲什麼'CreateLabel'擴展JLabel?它看起來像你是混淆繼承與建設者模式 – SJuan76 2012-07-19 23:47:03

+4

我的第一個問題將是*爲什麼*?你爲什麼要擴展JLabel來做到這一點?你打算創建一個工廠班嗎?那麼你會希望createlabel不能擴展任何東西,最終,createLabel方法將是靜態的。理想情況下,你永遠不會參考它...... – 2012-07-19 23:48:22

回答

2

我的理解是什麼,你想你的createLabel()方法將JLabel添加到通過JFrame。你可以做的是:

public class LabelCreator /*extends JLabel*/ { 
    /*private static final long serialVersionUID = 1L;*/ 
    /*private static JLabel label;*/ 

    public Component createLabel(JFrame frame, String text) { 
     JLabel label = new JLabel(text); 
     return frame/*.getContentPane()*/.add(label); 
    } 
} 

注意類名的改變以尊重命名約定。

+0

謝謝你,這也工作得很好。爲什麼你說要將類名從CreateLabel改爲LabelCreator?謝謝。 – JoJo 2012-07-20 10:25:18

+0

@JoJo:因爲類名應該是一個名詞。方法應該是動詞。另外,如果它有效,你應該接受答案。 – Mohayemin 2012-07-20 10:28:14

+0

我也不確定你爲什麼要將框架傳遞給創建方法。這意味着標籤總是被添加到內容窗格的中心,這幾乎不是您真正想要的內容。 – 2012-07-20 16:26:23

相關問題