Java KeyListener 不起作用,我认为它与 addKeyListener() 有关;方法我不知道为什么

标签 java model-view-controller keylistener arrow-keys

我正在开发一款遵循 MVC 框架的贪吃蛇游戏。为此,我决定将 keyListener 放在程序的 Controller 部分。最初我把它放在 View 部分并且效果很好。但是,当我将 KeyListener 移至 Controller 时,它不起作用。我认为这与 View 扩展了 JFrame 但 Controller 没有扩展这一事实有关。我的具体问题是我不知道如何添加 addKeyListener(this)。我拥有 KeyListener 的目标是让我知道何时按下游戏中的箭头键。

这是 Controller

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

//import static com.sun.java.accessibility.util.AWTEventMonitor.addKeyListener;// this is what was suggested so that addKeyListener would work

public class Controller implements KeyListener {//this talks to the model and view
Model model;
View view;
public Controller(){
    model=new Model();
    view=new View();
    addKeyListener(this);
    System.out.println("Hello");

}
@Override
public void keyTyped(KeyEvent e) {
    System.out.println("Hey");
}

@Override
public void keyPressed(KeyEvent e) {
    System.out.println("Sup");

}

@Override
public void keyReleased(KeyEvent e) {
    System.out.println("WRUD");
}

public static void main(String[] args){
    System.out.println("Welcome to Snake");
    new Controller();
}

}

这是 View

import javax.swing.*;
import java.awt.*;

public class View extends JFrame  {//this is what is viewed
        GameBoard gameBoard;//=new GameBoard();
    protected View() {
    super();
    setTitle("Snake");
    setSize(500,500);
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    getContentPane().setLayout(new BorderLayout());
    gameBoard=new GameBoard();
    add(gameBoard);
    setVisible(true);
}

    // @Override
   // protected void paintComponent(Graphics g){
   //    super.paintComponent(g);
   //     g.setColor(Color.RED);
   //     g.drawRect(0,0,10,10);
   //     g.fillRect(0,0,10,10);
   // }


}

我真的很感谢任何帮助。如果有些事情不清楚或者我需要添加更多代码,我会很乐意这样做。

最佳答案

您无法在 Controller 类上调用 addKeyListener,因为它没有 addKeyListener 方法。

您可以在 Controller实现 KeyListener 并将其添加到您的View > 实例。只需在您的 View 上调用 addKeyListener 即可。

public Controller() {
    model = new Model();
    view = new View();
    view.addKeyListener(this); // changed
    System.out.println("Hello");
}

关于Java KeyListener 不起作用,我认为它与 addKeyListener() 有关;方法我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174761/

相关文章:

java - org.postgresql.util.PSQLException : The column index is out of range: 2, 列数:1

java - 图像未出现在小程序中

java - 无法识别来自 KeyListener 的输入

java - System.currentTimeMillis() 方法真的返回当前时间吗?

java - "Spring transaction"和 "Hibernate transaction"有什么区别

c - 可编辑 GtkTreeView 的困难

c# - ItextSharp 将图像缩放/调整大小为 PDF

java - 如何划分 Controller ?

java - (Java) 我可以使用KeyListener输入文本吗? (事件调度线程内部)

java - 是否可以使 Hibernate 3.1 为子实体生成左外连接?