2010-11-11 67 views
0

添加一個抽象類的實例,我有這樣一段代碼:爪哇 - 在另一個實例

public class Profile extends Container{ 
    public Profile(String value) { 
     Container profilo_1 =new Container(); 
     Container profilo_2 =new Container(); 

     // (1) THIS ADD A BUTTON TO THE MAIN CLASS 
     this.createButton().setLabel("Modifica Profilo"); 

     // (2) NOW I NEED TO ADD A BUTTON INTO THE INSTANCE OF profilo_2 BUT IT FAILS 
     profilo_2.add(this.createButton()); 

     this.add(profilo_1); 
     this.add(profilo_2);   
    } 
} 

點(2)失敗,因爲它說,我將要增加一個孩子到這個容器,但它的所有者已經由容器...

事實上,如果我這樣做:

ILabel label=new ILabel(); 
profilo_2.add(label); 

也對我說,ILabel()是abract,不能被實例化!

我該如何解決?歡呼聲給大家:)

回答

1

猜測瘋狂,因爲這取決於你的代碼...試試這個(更多收起什麼彼得說)

profilo_2.add(profilo_2.createButton());

+0

不幸的是,這不工作... – markzzz 2010-11-11 15:01:49

+0

你得到一個異常,或者它不工作?順便說一句,你在使用什麼框架?我猜這是一些UI框架?在這種情況下,如果你告訴我們哪一個,我們可以幫助你。 – 2010-11-11 15:07:53

+0

我解決了:)用這個profilo_2.createButton()。setLabel(「EDIT」);有用!!只是我直接調用容器的實例。謝謝,是的,它是一個UI框架:) p.s.作爲信息,我如何「大膽」我的文字在這個stackoverflow評論框?我不知道bbcode嘿嘿 – markzzz 2010-11-11 15:09:52

0

可能setLabel()返回的東西不能傳遞給Container::add(..)。爲Container

1

嘗試改用

Button button2 = this.createButton(); 
button2.setLabel("EDIT"); 
profilo_2.add(button2); 

通過此無關抽象類的方式請提供你的代碼,從我所看到的

編輯:雖然你說#1 「向主類添加一個按鈕」,這是否意味着createButton()會執行this.add(button)?如果是這樣,那麼你應該改變這個功能,這樣每次你創建一個按鈕都不會完成。

+0

是的,如果我做this.createButton();它與this.add(button)相同; – markzzz 2010-11-11 14:57:39

1

問題可能是,當您使用「this.createButton」創建按鈕時,該按鈕的父級設置爲「this」(在此上下文中),並且當您嘗試將其添加到profilo_2時,它會拋出錯誤。相反,你應該直接在profilo_2上創建按鈕,然後父母將是正確的(也許你不必添加()它)?

+0

是的,但我該怎麼辦?看到主題,我用更多的信息編輯它! – markzzz 2010-11-11 14:58:28

+0

在代碼中,它會像@弗拉維奧寫的 – 2010-11-11 15:02:49