[問題] JList監聽事件與MVC架構實作

作者: kotou (Eddie)   2015-03-05 15:28:20
目前自己做了一個小工具
雖然可以正常運作,但有些觀念想要釐清
希望有大大可以開釋
View : 放了一個 JTextfield 一個JButton 三個JList:list1、list2、list3
Control : 監聽JButton事件,當使用者按下後,讀取JTextfield內容,
將資料傳入Model內的函式,收到回傳值後,呼叫View裡面的函式
此時會new 一個class 使用裡面的函式分析Json資料
然後更新JList的內容
Model : 取得網路資料(Json),寫入成為字串,回傳字串內容
問題一 : 我這樣自以為是MVC的設計,有甚麼地方該改進的嗎?
問題二 : 這是關於JList的問題,我寫了一個JList監聽事件的class
讓list2控制list3的內容,擷取list2目前點擊的getSelectedIndex
在Control的Class內,將傳入的View Class 針對list2
增加view.list2.addMouseListener,然後裡面的事件動作
是在另一個Class執行,若使用者輸入3次,
第一次 : list2 有兩個item可以選擇
第二次 : list2 有一個item可以選擇
第三次 : list2 有兩個item可以選擇
但是當第三次按下,list2的第二選項後,
會出現java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
而我有寫一個提示框,當例外發生會顯示提示框。所以這時會顯示一次
若繼續輸入第四次、第五次:
第四次 : list2 有一個item可以選擇
第五次 : list2 有兩個item可以選擇
當第五次時,按下list2的第二選項,因為第二、四次均只有一個選項
因此會出現,兩次提出框...沒錯會累加!
debug後,發現是因為第二、四次list2只有一個item,因此會出現這個錯誤
可是我每次都有清除裡面的 DefaultListModel,再增加新的。
之後的解決方法是,直接在view裡面增加addMouseListener,
處理的事件也在view裡面解決,不過這樣符合MVC嗎?
感覺是因為我在Control傳入的view class,不是初始的那一個
導致每次輸入資料,都會有一個list2的物件產生
像是這種問題,要怎麼解決?
個人感覺監聽事件應該是放在Control,而不是放在view裡面...
以上是我的問題陳述,如有不清楚的地方我可以再補充
希望有大大願意解惑,謝謝。

Links booklink

Contact Us: admin [ a t ] ucptt.com