why adding 2 classes that draw ellipses in the JPanel can not use commands KeyListener I implemented one of them?
import javax.swing.JFrame;
/**
* Write a description of class Arena here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Arena extends JFrame
{
public static void main(String[] args) {
JFrame arena = new JFrame("Ball_Battle");
arena.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
arena.setSize(1000, 700);
arena.setVisible(true);
arena.setLocationRelativeTo(null);
arena.add(new Player());
arena.add(new Enemigo());
}
}
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JPanel;
public class Player extends JPanel
implements KeyListener, MouseListener
{
Line2D.Double disparo;
Ellipse2D.Double cuerpo;
protected double x = 461;
protected double dx = 310;
protected double y = 40;
protected double dy = y;
protected boolean vida = true;
public Player() {
this.setFocusable(true);
this.requestFocusInWindow();
cuerpo = new Ellipse2D.Double(x, dx, y, y);
disparo = new Line2D.Double();
this.addKeyListener(this);
this.addMouseListener(this);
}
@Override
public void paintComponent(Graphics g1) {
super.paintComponent(g1);
Graphics2D miC = (Graphics2D) g1;
miC.setColor(Color.BLUE);
miC.fill(cuerpo);
miC.draw(cuerpo);
Graphics2D miD = (Graphics2D) g1;
miD.setColor(Color.BLUE);
miD.fill(disparo);
miD.draw(disparo);
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_LEFT){
x-=5;
cuerpo.setFrame(x,dx,y,dy);
}
if(e.getKeyCode() == KeyEvent.VK_RIGHT){
x+=5;
cuerpo.setFrame(x,dx,y,dy);
}
if(e.getKeyCode() == KeyEvent.VK_UP){
dx-=5;
cuerpo.setFrame(x,dx,y,dy);
}
if(e.getKeyCode() == KeyEvent.VK_DOWN){
dx+=5;
cuerpo.setFrame(x,dx,y,dy);
}
repaint();
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {}
@Override
public void mouseExited(MouseEvent e) {}
@Override
public void mousePressed(MouseEvent e) {
disparo.setLine(x+20, dx+20, e.getX(), e.getY());
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
disparo.setLine(x+20, dx+20, x+20, dx+20);
repaint();
}
}
import java.util.Random;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
public class Enemigo extends Player
{
Ellipse2D.Double enemy;
private Random random = new Random();
protected int rX = (int)(random.nextDouble()*943);
protected int rY = (int)(random.nextDouble()*620);
protected int rZ = (int)(random.nextDouble()*Math.abs(40-rX));
public Enemigo() {
generarEnemigo();
}
@Override
public void paint(Graphics enemy) {
super.paint(enemy);
enemy.setColor(Color.RED);
enemy.fillOval(rX, rY, 40, 40);
}
public void generarEnemigo() {
if(Math.abs(rX-x) < 40 || Math.abs(rY-dx) < 40){
enemy = new Ellipse2D.Double(rX+(rX/4), rY+(rY/2), 42, 42);
}
enemy = new Ellipse2D.Double(rX, rY, 42, 42);
}
}
super();