Animation mit Keylistener

Status
Nicht offen für weitere Antworten.

Mr.Sado

Mitglied
Hallo, ich habe erst vor ein paar Wochen mit Java angefangen und wollte mich jetzt in die Animation einarbeiten.
Mein erstes Programm bewegt ein Rechteck in einem JPanel bis zu den Grenzen. Die Animation funktioniert, jedoch will ich jetzt einen Keylistener einbauen, der das Rechteck über die Pfeiltasten steuert.

Mein Problem liegt jetzt in der Verbindung des Listeners, der in der JFrame Klasse ist mit der Paint Klasse im JPanel. Könnt ihr mir da helfen, oder geht das viel einfacher? 🙂 So sieht das Programm aus:

Code:
import java.awt.*; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;

class Panel extends JPanel {
	
	
		private int x=0;
		private int y = 0;
		int richt;
		
		
		
		public void paintComponent(Graphics g)
		{
			super.paintComponent(g);
			g.fillRect(x, y, 20, 30);
			
			

		}
		
		
		public void paint()
		{
			if (richt==0)
			{
				x++;
				if(x == 800)
					richt = 1;
			}
			if (richt==1)
			{
				x--;
				if(x==0)
					richt =0;
			}
			
			if (richt==2)
			{
				y++;
				if(y==600)
					richt =3;
			}
			
			if (richt==3)
			{
				y--;
				if(y==0)
					richt =2;
			}
			
			repaint();
		
		}	
	
}


class Animator1 extends Thread 
{
	private Panel animPanel;
	private int del;

	public Animator1(Panel animPanel, int delay)
	{
		this.animPanel = animPanel;
		del = delay;
	}
	public synchronized void run()
	{
		while(true)
		{
			

			animPanel.paint();
			try
			{
				Thread.sleep(del);
			}
			catch(InterruptedException e) {}
		}
	}
	

}


class Fenster extends JFrame implements KeyListener {
	int richt;
	
	public Fenster(String Titel){
		
		this.setTitle(Titel);
		addKeyListener(this);

	}
	
		public void keyPressed(KeyEvent event) {
		if (event.getKeyCode() == KeyEvent.VK_ESCAPE ) {
			setVisible(false);
			
			System.exit(0);
		}	
		
		if (event.getKeyCode() == KeyEvent.VK_RIGHT  ) {
			richt=0;
		}	
		
		if (event.getKeyCode() == KeyEvent.VK_LEFT  ) {
			
			richt=1;
		}	
		
		
		if (event.getKeyCode() == KeyEvent.VK_DOWN  ) {
			
			richt=2;
			
		}	
		
		if (event.getKeyCode() == KeyEvent.VK_UP  ) {
			richt=3;
		}	
		
		
	}

	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}


}

public class Test {
	
	public static void main(String[] args) {
		Fenster Fenster = new Fenster("Rechteck");
		Panel Ausgabe = new Panel();
		Animator1 Ani2 = new Animator1(Ausgabe,10);
		Fenster.getContentPane().add(Ausgabe);
		Fenster.setSize(800,600);
		Fenster.show();
		Ani2.start();
	
		
	}
	
}


Danke, Mr.Sado
 
Hallo,
hier ein Lösungsvorschlag:

Code:
public class Test {

   public static void main(String[] args) {
      Panel Ausgabe = new Panel();
      Fenster Fenster = new Fenster(Ausgabe,"Rechteck");
      Animator1 Ani2 = new Animator1(Ausgabe,10);
      Fenster.getContentPane().add(Ausgabe);
      Fenster.setBounds(100,100,800,400);
      Fenster.show();
      Ani2.start();
   }
}


import java.awt.*; import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;

class Panel extends JPanel {

      private int x=0;
      private int y = 0;
      int richt;

      public void paintComponent(Graphics g)
      {
         super.paintComponent(g);
         g.fillRect(x, y, 20, 30);
      }

      public void setRicht(int richt) {
        this.richt=richt;
      }

      public void paint()
      {
         if (richt==0)
         {
            x++;
            if(x == 800)           richt = 1;
         }
         if (richt==1)
         {
            x--;
            if(x==0)               richt =0;
         }

         if (richt==2)
         {
            y++;
            if(y==600)             richt =3;
         }

         if (richt==3)
         {
            y--;
            if(y==0)               richt =2;
         }

         repaint();

      }

}


import javax.swing.*;
import java.awt.event.*;

class Fenster extends JFrame implements KeyListener {
  private Panel panel = new Panel();;

   public Fenster(Panel panel, String Titel){

      this.setTitle(Titel);
      this.panel = panel;
      addKeyListener(this);

   }

      public void keyPressed(KeyEvent event) {
      if (event.getKeyCode() == KeyEvent.VK_ESCAPE ) {
         setVisible(false);

         System.exit(0);
      }

      if (event.getKeyCode() == KeyEvent.VK_RIGHT  ) {
         panel.setRicht(0);
      }

      if (event.getKeyCode() == KeyEvent.VK_LEFT  ) {
         panel.setRicht(1);
      }

      if (event.getKeyCode() == KeyEvent.VK_DOWN  ) {
         panel.setRicht(2);
      }

      if (event.getKeyCode() == KeyEvent.VK_UP  ) {
         panel.setRicht(3);
      }

   }

   public void keyReleased(KeyEvent arg0) {
      // TODO Auto-generated method stub
   }

   public void keyTyped(KeyEvent arg0) {
      // TODO Auto-generated method stub
   }
}



import javax.swing.*;

class Animator1 extends Thread
{
   private Panel animPanel;
   private int del;

   public Animator1(Panel animPanel, int delay)
   {
      this.animPanel = animPanel;
      del = delay;
   }
   public synchronized void run()
   {
      while(true)
      {

      animPanel.paint();
         try
         {
            Thread.sleep(del);
         }
         catch(InterruptedException e) {}
      }
   }


}



Grüße von Sunny
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben