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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| 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; int velY = 0; public Main() { 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; } @Override public Dimension getPreferredSize() { return new Dimension(frameWidth, frameHeight); } 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); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run(){ createAndShowGui(); } }); } } |
any suggestions of where I'm going wrong?