【问题标题】:How to call function in MVC style programming?如何在 MVC 风格编程中调用函数?
【发布时间】:2017-12-01 19:29:40
【问题描述】:

好的,这是我的模型包中的一个类:

package accountManager.model;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import accountManager.view.JFrame;

public class AccountModel extends AbstractModel{
public String [] getInfo() throws IOException {

    FileReader in = new FileReader("data");
    BufferedReader br = new BufferedReader(in);

    //List<String> lines = new Array<String>();
    String line;
    int num_lines = 0;

    String[] accountData = new String[5];

    while((line = br.readLine()) != null)
    {
        accountData[num_lines] = line;
        num_lines++;
        //System.out.println(line);
    }
    return accountData;
}

}

这是我试图调用一个函数以将一个数组从该函数放入 JComboBox 的地方,但我不知道如何正确调用它,并且很确定我做错了......

JComboBox<String> comboBox = new JComboBox<String>(((AccountModel)model).getInfo());
    comboBox.setBounds(135, 30, 140, 20);
    contentPane.add(comboBox);

我还将这两个导入到包含 JComboBox 的 Jframe 中:

import accountManager.model.AccountModel;
import accountManager.model.Model;

我只是不知道自己在做什么,我对 java 很陌生。请帮忙。

【问题讨论】:

    标签: java swing model-view-controller


    【解决方案1】:

    您的控制器在哪里? MVC = 模型-视图-控制器。你有你的模型,你有你的视图,你的控制器在哪里?通常,您在控制器中调用模型函数,并将从这些函数中获得的数据传递给视图。控制器是模型和视图之间的粘合剂。

    您可以更进一步,使用 pubsub 模式。这促进了松散耦合。将您的视图作为订阅者添加到控制器、发布者,并通过订阅者接口调用适当的函数。见http://cs.unc.edu/~dewan/comp114/s09/Class%20Notes/15_MVC_Notes.pdf

    【讨论】:

    • 我确实有一个控制器,我只是认为我的模型和视图只会在涉及按钮时进行交互,尽管老实说我不知道​​代码在哪里,很多人说很多不同事物。不过感谢阅读材料! :)
    • 你有一个例子来说明如何使用 MVC 样式代码调用函数吗?
    • 您的视图和模型从不直接交互。您的控制器调用模型上的一个函数,其中包含您的业务逻辑,然后控制器将此数据传递给视图。
    【解决方案2】:

    MVC 将规定“控制器”将使用“模型”中的数据作为“视图”的种子,因此它建议您的“控制器”需要从“模型”中读取数据并将其传递给“ view”,这意味着视图需要为“控制器”提供一些方法来向它传递数据,具体如何由您决定,但可以通过提供setInfo 方法。

    我可能会关注的一件事是确保“视图”不直接暴露 UI 元素,因为“控制器”不应该关心 UI 的“如何”实现,只需通过它提供适当的合同“控制器”和“视图”可以通信。

    另外,Swing 已经是一个 MVC,所以要小心尝试将另一个 MVC 放在它上面,这往往会导致很多其他问题。

    【讨论】:

      猜你喜欢
      • 2022-11-30
      • 2010-09-27
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多