import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.concurrent.ThreadLocalRandom;
public class Game {
public static void main(String[] args) {
new Game().start();
}
public void start() {
Board board = new Board();
board.add(new Circle(100, 100, new Dimension(50, 50)));
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setContentPane(board);
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("sprites/cursor.png");
Cursor c = toolkit.createCustomCursor(image, new Point(frame.getX(), frame.getY()), "img");
// make a circle object and click
frame.setCursor(c);
frame.setVisible(true);
}
}
class Board extends JPanel {
Board() {
super(null);
}
}
class Circle extends JComponent {
Circle(int x, int y, Dimension size) {
setBounds(new Rectangle(new Point(x, y), size));
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
switch(keyCode) {
case KeyEvent.VK_Z:
move();
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
/*addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
move();
}
});*/
}
private void move() {
Container board = SwingUtilities.getAncestorOfClass(JPanel.class, this);
setLocation(new Point(
ThreadLocalRandom.current().nextInt(board.getWidth() - 20),
ThreadLocalRandom.current().nextInt(board.getHeight() - 20)
));
}
@Override
protected void paintComponent(Graphics g) {
g.setColor(Color.RED);
g.fillOval(0, 0, getWidth(), getHeight());
}
}
This is currently all my code. What I want to do is that when I click z
on the red point, it makes goes to another location. It worked with the MouseEvent
but now it doesn’t work with the KeyEvent
. I’m also new to Java so I might not know some stuff.