0
私は、オブジェクトの移動を許可しているゲームのために私のコンストラクタで作成した(オーバーライドした)keyPressedメソッドを呼び出そうとしています。メインクラスにActionListenerとKeyListenerを実装しました。JavaコンストラクタでActionListenerメソッドを実装しています
これも可能ですか? this.keyPressed(KeyEvent e)
でメソッドを呼び出そうとしましたが、eを初期化する方法がわかりません。
これを行うにはどうすればよいでしょうか?
Timer timer = new Timer(DELAY, this);
public Game(Main game) {
this.game = game;
gamePanel = new GamePanel();
buttonPanel = new JPanel();
buttonPanel.add(startButton);
this.addKeyListener(this);
this.setFocusable(true);
this.setFocusTraversalKeysEnabled(false);
this.getContentPane().add(gamePanel, BorderLayout.CENTER);
this.getContentPane().add(buttonPanel, BorderLayout.PAGE_END);
this.setSize(1000, 1000);
this.setVisible(true);
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
game.move("u");
break;
case KeyEvent.VK_DOWN:
game.move("d");
break;
case KeyEvent.VK_RIGHT:
game.move("r");
break;
case KeyEvent.VK_LEFT:
game.move("l");
break;
}
}
@Override
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if (src == timer) {
game.updateBoard();
if (game.gameEnded()) {
timer.stop();
}
repaint();
} else if (src == startButton) {
if (timer.isRunning()) {
timer.stop();
} else {
timer.stop();
}
}
}
ありがとう@Judgerは役に立ちました。私はそれを作成した後、自動的にタイマーを起動する必要がありますか?私は 'actionPerformed(ActionEvent e) 'をオーバーライドしています。クラス' Timer timer = new Timer(DELAY、this);の開始時にグローバルにタイマーを作成しました; '私の' actionPerformed ActionEvent e) 'メソッド'オブジェクトsrc = e.getSource(); ' – user5402
変更を加えた質問を編集しました。この作品のようなものはありますか? – user5402
'this 'を一つの引数として使って、' Timer'オブジェクトをインスタンス化することはできません。それをコンストラクタで初期化する必要があります。 – Judger