2010-08-11 160 views
0

我有以下結構:Java;訪問成員實例變量從另一個類

public class A { 
    private javax.swing.JLabel fullName; 

    public class B { 
      public B() { 
        fullName.setText("Martha Stewart"); 
      } 
    } 
    ... 
    ... 
    ... 
} 

我的目標是讓B(目前分A類)是在一個單獨的類。

問題是:當我分開這兩個類時,我失去了JLabel的.setText()調用功能。我知道如果B在一個單獨的類中,我將不得不在A類中編寫一個公共setter方法。

然而,這是不合理的,因爲我有大約100個按鈕,並且每個按鈕使用4-5個不同的函數按鈕。爲每個函數創建一個getter/setter方法是不合理的恕我直言。

我試圖圍繞一個更好的解決方案包裹我的頭...可以幫助你們任何人,朋友嗎?

+0

爲什麼要將其作爲子類刪除? – 2010-08-11 21:42:34

+1

你能解釋一下你爲什麼要在一個單獨的類中設置標籤文本嗎?你能不能創建一個帶有JLabel和String的方法,並在該標籤對象上調用setText?然後,A類可以傳遞它的JLabel對象,它將在A類之外被修改。(不知道我是否理解你的意圖,因此不確定這是否符合答案。) – MikeTheReader 2010-08-11 21:44:32

+0

B類爲特定「選項卡組」執行特定任務「在我的GUI中,還有更多喜歡它的東西。 例如: 我有一個5模塊的模擬器。每個模塊都是一個子類。每個子類在GUI中都有特定的功能。 – 2010-08-11 21:45:58

回答

2

不是 A的子類,這是一個嵌套(內)A.內類

但是,你不應該試圖去其他類型的字段的訪問 - 它打破封裝。屬性是一個更好的解決方案 - 或者,也可以調用fullName.setText()本身的setFullNameText方法。僅僅因爲你有100個按鈕(哎喲!)並不意味着是時候把封裝扔出窗外了。這確實意味着您可能想要考慮將這100個字段分組爲較小的類...

+0

感謝您的迴應!有沒有辦法自動生成getter/setter,還是必須一個一個單獨做? – 2010-08-11 21:52:16

+2

像Eclipse這樣的IDE可以生成所有這些。 – KeatsPeeks 2010-08-11 21:53:12

2

不要讓某個類修改另一個類的屬性,這會破壞封裝。如果你無法忍受getter和setter,我會建議一個配置對象(比如map),它可以被賦予構造函數和/或你的主GUI類的setter。

順便說一句:

我有大約100按鈕

我認爲這是一個主要的問題。您應該在代表控件組的幾個類中打破GUI。