This site requires JavaScript, please enable it in your browser!
Greenfoot back
JohanS
JohanS wrote ...

2016/11/12

Java-2D Problem!!

JohanS JohanS

2016/11/12

#
why adding 2 classes that draw ellipses in the JPanel can not use commands KeyListener I implemented one of them?
Nosson1459 Nosson1459

2016/11/13

#
cud u explain a little more its kinda hard 2 try 2 decipher wat u want and also maybe a little coding
JohanS JohanS

2016/11/13

#
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);
   }
}



there are 3 classes
danpost danpost

2016/11/13

#
I believe the problem is that the constructor of the Enemigo class does not execute the constructor of the Player class to setup the listening implementations. Try inserting the following at line 143 above:
super();
JohanS JohanS

2016/11/14

#
Does not let me add anything, without ruining the keyListener commands
JohanS JohanS

2016/11/16

#
Thanks for your cooperation, but already fix error!
Nosson1459 Nosson1459

2016/11/16

#
How? (Just curious.)
You need to login to post a reply.