2015-04-02 56 views
0

我有一個基於嚮導的軟件,包含許多面板。可以有不同的路徑來獲取最後一個屏幕。所以每條路徑都有自己的控制器來計算數據。在所有路徑結束的最後一個面板中,有一個按鈕來完成數據。該按鈕具有在所有路徑的控制器中調用的動作偵聽器。所以當按下按鈕時,它基本上會運行所有的控制器,並且出現明顯的錯誤。 下面是在最後的面板按鈕動作監聽器的方法:我初始化動作監聽這樣如何爲單個按鈕設置多個ActionListeners

public void destinationNextButtonListener(ActionListener listenForDestinationNextButton){ 
     localDestinationNext.addActionListener(listenForDestinationNextButton); 
} 

而且每個控制器的承包商:

控制器1:

{ 
. 
. 
this.localDestinationChooser.destinationNextButtonListener(new destinationNextButtonListener()); 
} 

class destinationNextButtonListener implements ActionListener{...} 

所以,如果有2個控制器,當按下按鈕時,所有控制器開始工作。我正在尋找一個邏輯或者動作監聽器決定它必須監聽哪個控制器的東西。

有什麼想法?

+1

我的猜測是最後的屏幕應該由它自己的控制器控制。所有其他屏幕也會有其特定的控制器(可能從最後一個屏幕繼承),以便所有嚮導頁面上的最後一個屏幕上的按鈕行爲相同,而不管使用哪種實現(因爲它們全部從父級繼承) - 有道理? – ochi 2015-04-02 02:01:19

+1

@ochi感謝您的評論,它實際上啓發了我,是的答案是爲每個屏幕分開控制器。如果你提供它作爲答案,我可以勾選它。 – Dan 2015-04-03 02:39:07

回答

1

我認爲你應該在你的設計中使用繼承來提高靈活性(並且消除複雜性)。

這個概念應該是每個屏幕都應該由自己的控制器來控制。

所有其他屏幕將有其特定的控制器,以及(可能,甚至應該從最後一個屏幕一個繼承)

有了到位,按鈕的最後一個屏幕上的行爲同樣爲所有嚮導頁面,無論使用哪個實現(因爲它們都是從父頁面繼承的)

1

最好的想法(我知道的,而且我不是Java大師)將會在布爾語句中放入,如果用戶沿着這條路徑走下去的話。這樣在ActionListener定義boolean alphaPath(應該在程序開始時應該實例化爲false並且應該是一個類變量,不是本地的)然後設置爲true。然後在最後ActionListener使用 if else-if(延伸必要,即添加另一個else-if)語句設定爲找到哪條路徑,用戶便下去,執行正確的代碼,這樣

if(alphaPath == true) 
{ 
    //execute proper code 
} 

else if(betaPath == true) 
{ 
    //execute beta code 
} 

如果可以的話這將是巨大向我們展示更多代碼,以便我們能夠更好地理解您的程序。我基於我的解決方案,我的相信您的程序編碼。看到實際的代碼會很好。當您編輯代碼並將其添加到您的問題中時,請在該答案的評論部分中添加一條消息,我將編輯我的解決方案。

+0

謝謝你的回答,不幸的是我無法通過布爾邏輯來修復它。不過,我非常感謝你的回答,並且我認爲這個答案適用於小動作聽衆。 – Dan 2015-04-03 02:42:04