4

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

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

这是对正在发生的事情的简要说明:

  • 我有一个Model类,它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()正在调用该方法(其中包含 println 内容),但由于某种原因未设置侦听器:mouseReleased()单击按钮时从未调用过。

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

编辑(控制器代码):

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");
    }
}
4

1 回答 1

4

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

    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");
        }
    }

}
于 2012-11-04T10:47:19.027 回答