我正在开发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);
}
谢谢!
答案 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
。
示例:
addActionListener
和actionPerformed
。
答案 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));