我基于播放列表的概念实现了一个基本的Swing GUI,它是一个更大的DJ混音应用程序的一部分(想想原始的Virtual DJ(!))。播放列表基本上由轨道可以被拖放到其上的JTable组成,轨道可以从JTree被拖放。包含该表的JPanel还包含一组按钮,用于保存、加载和删除播放列表以及加载播放器。这些按钮状态需要根据应用程序的当前状态进行更新(启用/禁用)(即是否加载了播放列表?播放列表中是否有曲目?等)
我尝试遵循一种MVC模式,通过控制器将底层TableModel与表和按钮UI分离。
My button is...What是处理按钮更新的最优雅/最有效的方式吗?此时,对当前加载的播放列表文件的引用被存储在控制器中,并且控制器确定模型中的播放列表是否为空。然后,它将两个布尔值(isEmpty、isLoaded)发送到视图,然后视图根据这些值确定要启用的按钮。这种方法看起来有点不雅观,所以我欢迎任何建议。
谢谢!
发布于 2011-02-19 19:23:15
根据我对MVC的理解,理论上:
实践中的问题是,您的域模型(您的类)与Swing模型类不同。所以问题是谁在同步域和swing模型:控制器还是视图?
如我所见,您实现了选项1。
就我个人而言,我会使用选项2,其中控制器处理业务逻辑和域模型,而视图处理与域模型的同步和构建视图层次结构。
发布于 2011-03-02 23:38:06
您可以使用侦听器和操作来更优雅地完成此操作。对每个按钮使用AbstractAction。(您也可以将它们重复用于菜单项。)然后,您可以启用/禁用该操作,该按钮将更新以匹配。如果您将一个TableModelListener添加到您的表模型中,它将收到所有更改的通知,并可以对操作进行更新。
您将不会创建自己的MVC。您将在Swing类本身中使用固有的MVC。
https://stackoverflow.com/questions/5049904
复制相似问题