MVC问题。从View中获取Controller中的值

时间:2014-02-07 14:18:46

标签: java swing model-view-controller

我正在开发MVC应用程序,并且当用户按下按钮时,不知道如何在View to Controller中传递文本字段的值。此按钮的ActionListener放在Controller:

private class NewTaskListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        /* here I need to get values of textfields in View
           and pass them to AddNewTaskForUser
        */
        model.AddNewTaskForUser(userName, newTask);
    }
}

监听器以这种方式添加到按钮:

控制器:

this.view.AddNewTaskListanaer(new NewTaskListener());

查看:

public void AddNewTaskListanaer(ActionListener actionListener)
{
    btnSetupTask.addActionListener(actionListener);
}

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:1)

您的观点应该有公开的方法:

public String getTaskName() {
    return taskName.getText();
}

public String getDescription() {
    return description.getText();
}

// And so on and so on...

现在,您可以在控制器中从视图中获取所需的文本字段数据。所以现在在你的动作监听器中你可以做到:

private class NewTaskListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        String userName = view.getUsername();
        String newTask = view.getTaskName();

        model.AddNewTaskForUser(userName, newTask);
    }

}

这假设动作侦听器类在控制器中声明,因此它可以访问控制器属性。

此外,方法不应以大写字母开头。它们应采用lowerCamelCase

格式

示例:

addActionListeneractionPerformed

答案 1 :(得分:0)

您需要将文本字段的实例传递给听众。

private class NewTaskListener implements ActionListener {

    private JTextField textField;

    public NewTaskListener(JTextField textField) {
         this.textField = textField;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //.. do stuff
        model.AddNewTaskForUser(userName, newTask);
    }
}

并像这样创建:

this.view.AddNewTaskListanaer(new NewTaskListener(textField));