【问题标题】:Purpose of Model / MVC at Java SwingJava Swing 中模型/MVC 的目的
【发布时间】:2016-10-11 04:51:20
【问题描述】:

我有一个小问题。我不明白 ListModel 和/或 ListSelectionModel 的目的。 我认为 Java Swing 中的 MVC 模式/UI 委托原则很重要。

例如: 我有一个简单的 JList 并且想要获得一个选定的值。所以我只需添加一个带有 valueChanged Methode 的 ListSelectionListener。

但是我现在可以使用(默认)模型或(默认)SelectionModel 做什么? 或者模型是否有可能在幕后行动?我认为您只能通过模型​​获取所选数据并使用此模型更改数据的值。 所以你需要一个模型,但你并没有真正实现自定义模型?

这是我的代码:

String[] shoppingCart = {"Pen", "Paper", "Smartphone", "Cheese"};

    JList list = new JList(shoppingCart);

    c.add(list, BorderLayout.CENTER);

    ListSelectionModel lsm = list.getSelectionModel();

    ListModel lm = list.getModel();

    System.out.println("lm: " + lm);

    System.out.println("lsm: " + lsm);

    list.addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        //System.out.println(list.getSelectionModel().getValueIsAdjusting());
        System.out.println("value changed " + list.getSelectedValue());

    }
});

所以 getSelectionModel 给了我我选择的值。但也许它是一个从模型调用但在幕后调用的方法?

【问题讨论】:

    标签: java swing model-view-controller defaultlistmodel


    【解决方案1】:

    Default(ListModel) 用于添加您的模型数据。当数据被添加到模型时,它会自动刷新 Jlist。选择模型用于跟踪在列表中所做的选择。

    现在是 ListSelectionListener。当您想要一些选择事件的通知时,您可以实现这一点。如果您不需要通知,则不必使用。

    假设我有一个有模型的 Jlist。而这个模型对应一个表格数据。因此,如果您想设计一个 UI,在单击列表时要将模型数据加载到表单中,您可以添加 ListSelectionListener。

    list.getSelectedValue();
    

    无论监听器如何,都会给你选择的值(如果列表有一些选择)。

    【讨论】:

      【解决方案2】:

      假设 MVC 使代码易于阅读和迁移,即使它有助于可扩展性。 因此,如果您在表单中使用 MVC 编写程序,那么当您想要制作未来的 Web 版本时,您将能够轻松迁移代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 2014-10-17
        相关资源
        最近更新 更多