# Simulation einer Verfolgung



## martin27 (7. Mai 2008)

Hallo Leute!

Hab mit NetBeans eine JFrame Form erstellt und eine java klasse. Nun ist es so, dass ich die Klasse übersetzen und ausführen kann. Leider weiß ich nicht genau wie ich die java klasse ausführen kann wenn ich auf einen Botton in der 
JFrame Form drücke. Hab schon versucht die java Klasse als Beans zur JFrame Form hinzuzufügen. Klappt leider auch nicht. 

Wäre echt nett wenn mal jemand ein Blick drauf werfen könnte.
Danke schon mal im Voraus.



```
/*
 * Projekt.java
 *
 * Created on 6. Mai 2008, 18:04
 */



public class Projekt extends javax.swing.JFrame {
   
    
    /** Creates new form Projekt */
    public Projekt() {
        initComponents();
       
    }
    
   
    private void VerfolgungActionPerformed(java.awt.event.ActionEvent evt) {                                           
       if (Verfolgung.getText().equals("Verfolgung")) {
               JägerBeute.start();
            Verfolgung.setText("Verfolgung läuft!!");
        }
}                                          

    private void ResetActionPerformed(java.awt.event.ActionEvent evt) {                                      
        // TODO add your handling code here:
}                                     
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Projekt().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton Reset;
    private javax.swing.JButton Verfolgung;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JSlider jSlider1;
    private javax.swing.JSlider jSlider2;
    // End of variables declaration                   
    
}





Ab hier ist es die java-Klasse!!!


 import java.awt.*;
 import java.applet.*;
 
 
 
 public class JägerBeute extends Applet implements Runnable {
 
    

     Image im = null;
     Graphics gr = null;
     Dimension d = null;
 
     
     Thread verfolgung; 
 
     double u;          // Geschwindigkeit des Ziels.
     double v;          // Geschwindigkeit des Verfolgers.
     double xQ;         // x-Koordinate des Ziels.
     double yQ;         // y-Koordinate des Ziels.
     double xP;         // x-Koordinate des Verfolgers.
     double yP;         // y-Koordinate des Verfolgers.
     double dPQ;        // aktueller Abstand des Verfolgers vom Ziel.
     double r;          // Radius der Kreise, die die Akteure am Bildschirm repräsentieren.

 
    
     public void init()
     {
       

         add(new Button("Verfolgung")); 
         add(new Button("Reset"));    
         setBackground(Color.gray); 
         d=size();                                 // Appletgröße (im HTML-Text festgelegt) wird abgefragt.
         im = createImage(d.width, d.height);      // Ein Offscreen-Image der
         gr = im.getGraphics();                    // selben Größe wird erzeugt.  
         r=2.5;
 
     } 
    
     public void start()
     {
         xP=100;                //Startkoordinaten des Verfolgers
         yP=50;     
         xQ=20;                 //Startkoordinaten des Ziels
         yQ=220;
         u=2;                   // vZiel=2 Pixel/Z.
         v=2.5;                 // vVerfolger=2.5 Pixel/Z
         
         repaint();             // Zeichnen der Startpositionen.

     }
   
     public void stop() 
     {
         if (verfolgung!=null)         // Falls unser Thread 'verfolgung'
         {                             // gestartet und noch nicht wieder

             verfolgung.stop();        // gestoppt wurde, wird er nun gestoppt
             verfolgung=null;          // (Einsparen von Rechnerzeit).
         }                            
     }
   
     
     
     public boolean action(Event e, Object arg)
     {    
         if("Reset".equals(arg))        // falls der Reset-Button angeklickt wurde,

         {
                                        // leeren wir unsere Zeichenfläche,

             d=size();
             im = createImage(d.width,d.height);
             gr = im.getGraphics();
 
                                                // stoppen die Verfolgung (falls diese im Gang ist)

             if(verfolgung!=null)
             {
                 verfolgung.stop();
                 verfolgung=null;
             }
 
            
             start();    
             return true;                       // Benutzereingabe wurde korrekt bearbeitet.

         }
 
         else if("Verfolgung".equals(arg))      // falls der Verfolgungs-Button 

         {                                      // angeklickt wurde,

             if(verfolgung==null)               // falls dies nicht der Fall ist
             {
                 verfolgung=new Thread(this);   // erzeugen wir eine ThreadInstanz
                 verfolgung.start();            // und starten den Thread. Die run()-

                                 

             }
 
             return true;                       // Benutzereingabe wurde korrekt bearbeitet.

         }
 
         return super.action(e,arg);            // In dieser Methode nicht definierte 

                                                // Benutzereingaben werden an höhere 

                                                // Hierarchieklassen weitergeleitet.

     }
    
     
     public void run() 
     {
 
         while (true) 
         {
         
             // Der aktuelle Abstand von Ziel und Verfolger wird berechnet.

             dPQ = Math.sqrt(
                 Math.pow(xQ-xP,2) + Math.pow(yQ-yP,2)
                 );
             
             if(dPQ<r)  // Falls der Verfolger in eine hinreichende Umgebung des

             {           // Ziels eingedrungen ist, werten wir die Verfolgung als

                        // erfolgreich 

                 verfolgung.stop(); // und beenden sie.

                 verfolgung=null;
             }
 
             
             // Der Hase flüchte auf einer Geraden parallel zur x-Achse.

             xQ += u;  
     
             
             // Der Hund läuft entlang der Visierline auf den Hasen zu.

             xP += v * (xQ-xP)/dPQ;
             yP += v * (yQ-yP)/dPQ;       
         
             repaint();                     // Die neu errechneten Positionen der Akteure 

                                            // werden gezeichnet.

             try                     
             {                              // Der Thread wird für die Dauer von

                 Thread.sleep(100);         // 100ms in den Ruhezustand versetzt.

                                     
             }
             catch(Exception e){}                    
         }
     }
     
     
     
     public void update(Graphics g)
     {
         paint(g);  
     }
     
     
     public void paint(Graphics g) 
     {    
         
         gr.setColor(Color.blue);
         gr.fillOval((int)Math.round(xQ-r), (int)Math.round(yQ-r), (int)(2*r), (int)(2*r));
         gr.setColor(Color.red);
         gr.fillOval((int)Math.round(xP-r), (int)Math.round(yP-r), (int)(2*r), (int)(2*r));
         g.drawImage(im,0,0,d.width,d.height,this);    
     }
    
 }
```


----------



## MiDniGG (8. Mai 2008)

new Klasse();

od

Klasse klasse = new Klasse();


----------



## Quaxli (8. Mai 2008)

Aber WARUM sollte man aus einem JFrame eine Klasse aufrufen, die von Applet erbt. Der Sinn und Zweck erschließt sich mir nicht ganz.


----------

