Java MVC - 添加 MouseListener 时出现问题

标签 java swing model-view-controller listener mouselistener

我是一名 Java 学生,刚刚结束了一个小型命令行纸牌游戏的基本功能。该游戏是魔法类集换式卡牌游戏的简化版。没有人工智能,你与自己或其他人类玩家对战。

此时,我正在尝试使用 MVC 添加一些 GUI,但我发现在将 MouseListener 添加到按钮时出现问题

这是对正在发生的事情的简要解释:

  • 我有一个 Model 类,它通过继承父类(super class)来扩展 Observable
  • 一个 View 类,它实现了 Observer
  • 还有一个 Controller 类,它扩展了 MouseAdapter

然后我把所有东西放在一起:

....

View view = new View();
Model model = new Model();

model.addObserver( view );

Controller controller = new Controller();
// associate Controller's Model and View objects
controller.addModel(model);
controller.addView(view);

view.addController(controller); // i try to add the MouseListener

....

View的addController()方法是:

public void addController(Controller controller){
            this.myButton.addMouseListener( controller )
}

我已经检查过正在调用 addController() 方法(打印其中的内容),但由于某种原因没有设置 Listener:mouseReleased() 是单击按钮时从未调用过。

我可能忽略了任何想法或任何步骤?欣赏。

编辑( Controller 代码):

public class Controller extends MouseAdapter {

    Model model;
    View view;

    public void addModel(Model m){
            this.model = m;
    }

    public void addView(View ui){
            this.view = ui;
    }

    // All @Overrides

    @Override
    public void mouseReleased(MouseEvent me) {
        System.out.println("oh, it arrived");
    }
}

最佳答案

你一定做错了什么,但没有代码我不能说什么。 这是一些简单的代码(也许它可以帮助您了解自己做错了什么):

    import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test1 extends JFrame {

    public Test1() {
        initUI();
    }

    private void initUI() {
        JPanel container = new JPanel();
        container.setLayout(new BorderLayout());
        container.setBackground(Color.black);

        JButton b = new JButton("test");
        b.addMouseListener(new Controller());
        container.add(b);

        add(container);
        pack();

    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                Test1 c = new Test1();
                c.setVisible(true);
            }
        });
    }

    class Controller extends MouseAdapter {
        @Override
        public void mouseReleased(MouseEvent me) {
            System.out.println("oh, it arrived");
        }
    }

}

关于Java MVC - 添加 MouseListener 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217684/

相关文章:

java - 尝试使用 Castor 紧凑地序列化对象

java - 布局问题 - Java

Azure Web应用程序在发布或重新启动后非常慢

model-view-controller - 有没有办法在 Telerik MVC 网格中有条件地显示命令按钮?

java - 使用java计算图像中的亮度、对比度、色调和饱和度

java - 是否有任何键盘快捷键可以在 IntelliJ Idea 中的类上添加 @SuppressWarnings?

java - 如何实现适配器并过滤结果?

java - 如何在 ActionListener 中使用不同类中的方法?

java - 我如何使用 Java Swing 创建这个特殊的菜单栏?

c# - 如何在使用 STS (WIF) 进行身份验证的 MVC 应用程序中设置滑动过期