I’m trying to get a simple rectangle moving around on my JPanel.
everything is set up except for the fact the rectangle doesn’t respond to the keys.
package game;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class Main extends JPanel implements KeyListener, ActionListener {
private final int frameHeight = 400;
private final int frameWidth = 400;
private int objectDimension = 15;
JMenuBar menuBar;
JMenu file;
JMenuItem newGame;
JMenuItem checkScore;
JMenuItem endGame;
int objectX = 150;
int objectY = 150;
int velX = 0; // speed object moves X axis
int velY = 0; // speed object moves Y axis
// CONSTRUCTOR
public Main() {
//JMenuBar
menuBar = new JMenuBar();
file = new JMenu("File");
newGame = new JMenuItem("New Game");
checkScore = new JMenuItem("Check Score");
endGame = new JMenuItem("End Game");
menuBar.add(file);
file.add(newGame);
file.add(checkScore);
file.addSeparator();
file.add(endGame);
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public JMenuBar setJMenuBar(){
return menuBar;
}
// SETS SIZE FOR FRAME
@Override
public Dimension getPreferredSize() {
return new Dimension(frameWidth, frameHeight);
}
//PAINTCOMPONENT
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(objectX, objectY, objectDimension, objectDimension);
}
public void actionPerformed(ActionEvent e){
objectX = objectX + velX;
objectY = objectY + velY;
repaint();
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key == KeyEvent.VK_LEFT){
velX = -1;
velY = 0;
}
if(key == KeyEvent.VK_UP){
velY = -1;
velX = 0;
}
if(key == KeyEvent.VK_RIGHT){
velX = +1;
velY = 0;
}
if(key == KeyEvent.VK_DOWN){
velY = +1;
velX = 0;
}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
public static void createAndShowGui() {
Main main = new Main();
JFrame frame = new JFrame("My New Game!");
frame.getContentPane().add(main);
frame.setJMenuBar(main.setJMenuBar());
frame.pack();
frame.setVisible(true);
}
// MAIN METHOD
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run(){
createAndShowGui();
}
});
}
}
any suggestions of where I’m going wrong?