我想做一个非常简单的MVC项目,当我点击按钮时,我想在我的控制台上看到“napis”,但是ActionListener无法正常工作。有什么想法吗 ? (如果我在帖子上做错了,请在这里理解我的第一篇文章:))
public class Model {
public String napis (){
return "napis";
}
}
public class View {
private JFrame frame;
private JLabel label;
private JButton button;
public View (){
frame = new JFrame();
label = new JLabel("Napis");
button = new JButton("click");
frame.add(label);
frame.add(button);
frame.setSize(500,500);
button.setSize(30,30);
frame.setVisible(true);
}
public void addActionListener(ActionListener click){
button.addActionListener(click);
}
}
public class Controller {
private Model model;
private View view = new View();
public Controller (final Model model, View view) {
view.addActionListener(
new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
model.napis();
}
}
);{
}
}
}
ofc所有导入都是固定的。
答案 0 :(得分:1)
model.napis();
在控制台中没有写任何内容:
public String napis (){
return "napis";
}
只返回String
。
这应该这样做:
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(model.napis());
}
答案 1 :(得分:0)
在您的控制器类中,更改
model.napis();
到
System.out.println(model.napis());
你的问题是动作监听器接受String但对它没有任何作用。你要做的是打印返回的字符串。
答案 2 :(得分:0)
好的,所以你的代码有点令人困惑。您的Controller
正在创建View
的实例,但也传递了View
的实例。
它创建的实例没有附加ActionListener
,但是你传入的实例没有。{/ p>
两个View
都是创建并显示JFrame
由于首先会创建您传递的View
实例,但它首先显示,但View
创建的Controller
实例会创建第二个,它会显示在顶部 - 但它没有附加ActionListener
......
所以,你应该做的第一件事就是摆脱View
正在创建的Controller
的实例
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
Controller controller = new Controller(new Model(), new View());
}
public class Model {
public String napis() {
return "napis";
}
}
public class View {
private JFrame frame;
private JLabel label;
private JButton button;
public View() {
frame = new JFrame();
label = new JLabel("Napis");
button = new JButton("click");
frame.add(label);
frame.add(button);
frame.setSize(500, 500);
button.setSize(30, 30);
frame.setVisible(true);
}
public void addActionListener(ActionListener click) {
button.addActionListener(click);
}
}
public class Controller {
private Model model;
private View view;
public Controller(final Model model, View view) {
this.view = view;
this.model = model;
view.addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Clicked");
this.model.napis();
}
});
}
}
}
您还应该关注View
构造函数创建的副作用,创建和显示框架可能不是正确的选择
我还鼓励你研究“代码与接口不实现”的概念,因为它是MVC的关键方面之一