我是一名 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/