[问题] 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