Java KeyListener无法正常工作,我认为它与addKeyListener()有关;方法我不知道为什么

问题描述 投票:0回答:1

我正在进行一项跟随mvc框架工作的蛇游戏。为此我决定keyListener将在程序的控制器部分。最初我在视图部分有它,它运作良好。但是当我将KeyListener移动到控制器时,它不起作用。我认为这与view扩展JFrame但Controller不扩展这一事实有关。我的具体问题是我不知道如何添加addKeyListener(this)。我拥有KeyListener的目的是让我知道何时按下箭头键进行游戏。

这是控制器

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

}

这是观点

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


}

我非常感谢任何帮助。如果某些事情不明确或者我需要添加更多代码,我将很乐意这样做。

java model-view-controller keylistener arrow-keys
1个回答
1
投票

你不能在你的addKeyListener类上调用Controller,因为它没有addKeyListener方法。

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

public Controller() {
    model = new Model();
    view = new View();
    view.addKeyListener(this); // changed
    System.out.println("Hello");
}
© www.soinside.com 2019 - 2024. All rights reserved.