2013-10-29 106 views
0

假設我有一個gui,並且gui由兩部分組成,其中每個部分都有它自己的類。
所以一個類包含一個JLabel。
第二類包含一個帶有提交按鈕的文本字段。
我該如何着手讓這兩個組件相互交談?Java make組件互相交談

這當然是一個簡單的例子,但如果我有兩個類用於提交數據,另一個用於顯示提交的數據,那麼如何使這兩個組件進行通信?

+1

可以使用'調解員「,如果這兩個班級是同事和/或觀察員模式 – nachokk

+1

這個問題太寬泛。有很多方法可以進行交流,並且有很多關於良好模式的文檔。請讓你的問題更具體。 – jzd

+0

@jzd我不知道如何讓兩個類互相交流。任何方法只要有效就足夠了,我現在正在尋找Mediator,看起來不錯,但我從來不知道這種方法。 – Quillion

回答

2

的幾點思考:

  • 不要這樣綁定添加到GUI類,看起來像MVC
  • 單向更改傳播模式(輸入 - >輸出在你的例子),通常是從來沒有問題,但在很多情況下,需要可編輯組件組的完全同步。所以在開發任何自定義類或接口的良好可重用性的簡單情況下,可以牢記這一點。
  • 避免使用標誌進行無限循環更新,而不是比較組件值。
  • 不管你做什麼,讓事情分開,不管模式使用,不添加雙向引用(例如GUI類<中 - >控制器)無論MVC的

,有可能是一個控制器類,得到通過構造函數對UI對象(嵌套的JTextField s和JLabel s等)的所有必要參考。 在構建時,該控制器可以將自己附加到這些嵌套組件。 控制器應該最好包含嵌套的,內部的或可能是匿名的類來實現監聽器接口,而不是將監聽器接口添加到控制器本身。首先,要封裝這些偵聽器,其次,爲了避免事件源的區分,如果需要爲多個組件(源)實現相同的接口。這些偵聽器實現(也許非常通用的PropertyChangeListener)可以作爲對象(如上所述)或者使用mediator對象來更新其他組件。

1

如果你有一個提交按鈕,你可以添加一個動作監聽器。單擊時,您可以調用另一個類中的方法來接收字符串,然後將其顯示在JLabel上。然而,針對不同組件的多個類通常不是一個好主意,並且像Sam說的那樣擁有一個MVC好得多。

類具有的JTextArea

//Have this object created 
JLabelClass JLC = new JLabelClass(); 

//When submit button is clicked run this 
JLC.displayText(JTextArea.getText()); 

課內與JLabel的

//add this method 
public void displayText(String text){ 
    JLabel.setText(text); 
    //Refresh Gui and display stuff.... 
} 

希望這有助於...很抱歉的格式我還是新來的StackOverflow

+0

非常感謝,對不起,我不得不接受Sam的回答,因爲他說剛纔輸入的內容完全一樣,但他是第一個。 – Quillion