gpt4 book ai didi

java - 进度条 + Java 中的 MVC =?

转载 作者:搜寻专家 更新时间:2023-11-01 01:39:22 25 4
gpt4 key购买 nike

所以我在 Java Swing 中有这个漂亮的 MVC 架构应用程序,现在我想添加一个进度条,我对将 JProgressBar 合并到我的 View 中的良好设计方法感到困惑。我应该:

  • 将 DefaultBoundedRangeModel 添加到我的 Controller 状态,然后将其导出?

    class Model {
    final private DefaultBoundedRangeModel progress
    = new DefaultBoundedRangeModel();

    public void getProgressModel() { return progress; }
    public void setProgressCount(int i) { progress.setValue(i); }
    }

    class Controller {
    Model model;
    int progressCount;
    void doSomething()
    {
    model.setProgressCount(++progressCount);
    }
    }

    class View {
    void setup(Model m)
    {
    JProgressBar progressBar = /* get or create progress bar */ ;
    progressBar.setModel(m.getProgressModel());
    }
    }

    /* dilemma: Model allows progress to be exported so technically
    all of the progress state could be set by someone else; should it be put
    into a read-only wrapper? */
  • 使用 JGoodies Binding 尝试将 JProgressBar 的视觉状态连接到我的模型状态?

    class Model {
    private int progress;

    public void getProgressCount() { return progress; }
    public void setProgressCount(int i) { progress = i; }
    }

    class View {
    void setup(Model m)
    {
    ProgressBar progressBar = /* get or create progress bar */ ;
    CallSomeMagicMethodToConnect(m, "progressCount", progressBar, "value");
    // is there something that works like the above?
    // how do I get it to automatically update???
    }
    }
  • 或者别的东西???

编辑: 更具体地说:有人能给我指出一个 Java 应用程序的实际源代码的好例子,它有一个包含进度条的状态栏,并且有一个不错的 MVC 实现?

最佳答案

否(对 1)和 NOOOO(对 2)。至少在我看来。

否(对1):首先,DefaultBoundedRangeModel是一个javax.swing类。在我看来,这些类在模型中没有位置。例如,考虑存在于服务器上的模型,通过 RMI 访问 - 突然间将 javax.swing 类放在那里似乎“不对”。然而,真正的问题是您将模型的一部分(有界模型)提供给其他人,而无法控制触发的事件或进行的查询。

否(对 2):呃。绑定(bind)很有趣,但(至少在我看来)应该用于 UI 模型和 UI 组件之间的同步,而不是数据模型和 UI 模型之间的同步。再一次,想一想如果您的数据模型位于远程服务器上并由 RMI 访问会发生什么。

那又怎样?嗯,这只是一个建议,但我会添加一个事件监听器接口(interface)并添加标准事件监听器订阅方法(addListner(...)、removeListener(...))。当我进行更新时,我会从我的模型中调用这些监听器。当然,我会确保记录调用线程(或者说它无法确定),以便客户端(在本例中为 UI)能够正确同步(invokeLater 和 friend )。由于监听器服务将由 Controller 公开,这将允许模型存在于任何地方(甚至允许远程调用或合并监听器)。此外,这会将模型与 UI 分离,从而可以构建更多包含它的模型(翻译器/装饰器/依赖模型)。

希望这对您有所帮助。

关于java - 进度条 + Java 中的 MVC =?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/889551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com