我正在开发一个用于组织个人音乐收藏的Java应用程序,该应用程序允许用户在表格中显示的文本列表的帮助下搜索其数字音乐库,选择要播放的歌曲并提供有关它们的信息,例如Rekordbox()。在对如何设计和实现这样的系统进行了一些研究之后,我遇到了Model-View-Presenter设计模式,据我了解,该模式允许编写灵活,可重用和测试驱动的代码。所以来解决我的问题:视图类:假设我想拥有一个包含一个JFrame的Swing UI,该JFrame内部具有3个JPanels作为单独的视图类。即MainFrameView和MenuBarView,TablePanelView,PlayerPanelView是在框架内创建的(本身是视图类)。这些面板内部具有各种Swing组件,例如JMenuBar,JTable,JButtons,JProgressBar。模型类:我拥有的两个模型是TableModel(由TablePanelView用于显示用户的音乐库,并在List中存储其歌曲目录的路径)和PlayerModel(由PlayerPanelView用于控制数字音乐)。用户选择的音频文件,例如播放/暂停/停止歌曲,快进等。PlayerModel使用用户歌曲目录中选择的文件来初始化自身。因此,我的问题是我该如何实现Presenter,以便不同的视图(使用不同的模型)能够相互通信和共享信息?我应该只有一个与该视图交谈的演示者,还是每个视图都有一个演示者?如果有可能只有一个演示者,那该如何实现?如果我为MenuBarView,TablePanelView和PlayerPanelView有一个演示者,并且那些视图包含在另一个视图(即MainFrameView)中,则应该以某种方式组合演示者,如果可以,如何组合? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 如果我是您,我将在尝试MVP之前尝试使用MVC(模型视图控制)模式。它非常相似,但我想说它比较容易理解。我不会为MenuBar创建自己的视图,因为您可能不会动态创建它。只需在MainFrameView中编写一个用于初始化它的方法,然后在MainView的构造函数中调用该方法即可。模型是您使用的项目的属性。现在,如果您要创建一个具有自己模型的面板,但又想从MainFrameView访问该模型,则只需为其编写一个Getter / Setter。在MainFrameView中看起来像这样:public TablePanelView tpv;public void initTablePanelView(TablePanelModel tpm){ tpv = new TablePanelView(); tpv.setModel(tpm);}因此,您可以使用在TablePanelView中编写的公共方法getModel()或setModel()来访问模型。希望对您有所帮助。 (adsbygoogle = window.adsbygoogle || []).push({}); 08-28 22:36