Я работаю над змеиной игрой, которая следует структуре mvc. Для этого я решил, что keyListener будет находиться в разделе контроллера программы. Первоначально он у меня был в разделе просмотра, и он работал хорошо. однако, когда я переместил KeyListener на контроллер, это не сработало. Я думаю, что это как-то связано с тем, что представление расширяет JFrame, а контроллер - нет. моя конкретная проблема в том, что я не знаю, как добавить addKeyListener (это). Моя цель в том, чтобы иметь 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);
// }
}
Я очень ценю любую помощь. Если что-то непонятно или мне нужно добавить больше кода, я с радостью это сделаю.
addKeyListener
в своем классеController
, который, похоже, не имеет такого метода. Почему вы не хотите добавлять слушателя в свое представление? - person khelwood   schedule 05.09.2018View
расширяетJFrame
, так что на самом деле у него есть методaddKeyListener
. Вместо этого вы можете добавить своего ключевого прослушивателя в свое представление, просто изменивaddKeyListener(this);
наview.addKeyListener(this);
. - person khelwood   schedule 05.09.2018KeyListener
, это, как известно, проблематично — вместо этого используйте ключ API привязок - person MadProgrammer   schedule 05.09.2018