Start Button und Wert Eingabe in ein Fenster

Status
Nicht offen für weitere Antworten.

Veri91

Neues Mitglied
Hi,

ich versuche gerade ein Prgramm für zu erstellen das mit grafischer Ausgabe zeigt wie lange ein Auto braucht bis es einen Radfahrer eingeholt hat. Die Berechung läuft und die "animation" geht auch schon.
Jetzt Versuch ich seit ein paar Tagen noch in das Fenster einen Start Button einzubauen, der die Simulation startet und vier Felder wo man den Variablen dxr, dvr, dxa und dva einengeben kann.


Aber das haut nich hin 🙁. Könnte mir bitte einer Helfen?

Schonmal vielen vielen Dank





Hier noch mein Prgramm das bis jetzt läuft.

Code:
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;




public class Verfolgung

extends Frame
{
   public static void main(String[] args)
   {
	   Verfolgung wnd = new Verfolgung();
   }

   public Verfolgung()
   {
	   
	   
      super("Verfolgung");
      
      
	     addWindowListener(
	    	  
	      new WindowAdapter() 
	      {
	           public void windowClosing(WindowEvent event)
	           {
	               System.exit(0);
	           }
	        }
	     	);
      
      
      setBackground(Color.white);
      setSize(500,500);
      setVisible(true);
     
   }
   
   
  
   
   
   
   public void paint(Graphics g) 
   {
 
	   double dxr, dvr, dxa, dva;
	   double t;
	   int xr,  xa;
	   
	   dxr=150;     // Start Rad
	   dvr= 20;		// Geschwindigkeit Rad
	   dxa=50;		// Start Auto
	   dva=100;		// Geschwindgkeit Auto
	   
	   
	   
	   
	   t=(dxr-dxa)/(dva-dvr);			// Zeit in Stunden bis Auto das Rad eingeholt hat

	   
	   xr=(int) dxr;
	   xa=(int) dxa;
	
	   
	   
	   
	   

	   
	   g.drawLine(10,400,400,400);   // x-Achse
	   g.drawLine(10,401,400,401); 
	   g.drawLine(50,10,50,400); 		// y-Achse
	   g.drawLine(51,10,51,400); 
	
	   
	   g.fillOval(xa-3,400-3,6,6);  // Zeichne Startpositionen
	   g.fillOval(xr-3,400-3,6,6);
	
	      
	   
		while(xr>xa)
		
			{
		   
		 	
				try {
				    Thread.sleep(100);
				} catch (InterruptedException e){}
				
				
			
				
				
				dxa= dxa + dva*1/60;			// neue Position berechnen
				dxr= dxr + dvr*1/60;
				
				xr=(int) dxr;
				xa=(int) dxa;
			 
			   g.fillOval(xa-3,400-3,6,6);     // zeichne die neue Position
			   g.fillOval(xr-3,400-3,6,6);
			   
			 
			}

   }
}
 
Code:
package test;

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

public class Verfolgung2 extends JFrame implements ActionListener {

    private Animation animation;
    private JToolBar toolbar;
    private JButton btStart;
    private JTextField tfDxr,  tfDvr,  tfDxa,  tfDva;
    private JLabel lbDxr,  lbDvr,  lbDxa,  lbDva;

    public Verfolgung2() {
        super("Verfolgung2");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 500);
        toolbar = new JToolBar();
        btStart = new JButton("Start");
        tfDxr = new JTextField("150");
        tfDvr = new JTextField("20");
        tfDxa = new JTextField("50");
        tfDva = new JTextField("100");
        lbDxr = new JLabel("Start Rad: ");
        lbDvr = new JLabel("Geschwindigkeit Rad: ");
        lbDxa = new JLabel("Start Auto: ");
        lbDva = new JLabel("Geschwindigkeit Auto: ");
        toolbar.add(btStart);
        toolbar.add(lbDxr);
        toolbar.add(tfDxr);
        toolbar.add(lbDvr);
        toolbar.add(tfDvr);
        toolbar.add(lbDxa);
        toolbar.add(tfDxa);
        toolbar.add(lbDva);
        toolbar.add(tfDva);
        add(toolbar, BorderLayout.NORTH);
        btStart.addActionListener(this);
        tfDxr.addActionListener(this);
        tfDxa.addActionListener(this);
        animation = new Animation();
        initAnimation();
        add(animation);
    }

    private void initAnimation() {
        animation.setDxr(Integer.parseInt(tfDxr.getText()));// Start Rad
        animation.setDvr(Integer.parseInt(tfDvr.getText()));// Geschwindigkeit Rad
        animation.setDxa(Integer.parseInt(tfDxa.getText()));// Start Auto
        animation.setDva(Integer.parseInt(tfDva.getText()));// Geschwindgkeit Auto
        animation.init();
        animation.repaint();
    }

    public static void main(String[] args) {
        new Verfolgung2().setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if (source == btStart) {
            initAnimation();
            new Thread(animation).start();
        }
        if(source == tfDxr || source == tfDxa){
            initAnimation();
        }
    }
}

class Animation extends JPanel implements Runnable {

    private boolean first = true;
    private double dxr,  dvr,  dxa,  dva;
    private double t;
    private int xr,  xa;

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(10, 400, 400, 400);   // x-Achse
        g.drawLine(10, 401, 400, 401);
        g.drawLine(50, 10, 50, 400);       // y-Achse
        g.drawLine(51, 10, 51, 400);
        g.fillOval(xa - 3, 400 - 3, 6, 6);     // zeichne die neue Position
        g.setColor(Color.RED);
        g.fillOval(xr - 3, 400 - 3, 6, 6);
    }

    public void init() {
        t = (dxr - dxa) / (dva - dvr);         // Zeit in Stunden bis Auto das Rad eingeholt hat
        xr = (int) dxr;
        xa = (int) dxa;
    }

    public void run() {
        while (xr > xa) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
            dxa = dxa + dva * 1 / 60;         // neue Position berechnen
            dxr = dxr + dvr * 1 / 60;
            xr = (int) dxr;
            xa = (int) dxa;
            repaint();
        }
    }

    public void setDva(double dva) {
        this.dva = dva;
    }

    public void setDvr(double dvr) {
        this.dvr = dvr;
    }

    public void setDxa(double dxa) {
        this.dxa = dxa;
    }

    public void setDxr(double dxr) {
        this.dxr = dxr;
    }
}
 
WOW! Vielen Dank André! 😀

Kein Wunder, dass das bei mir nicht geklappt hat, ich hab noch viel zu lernen.

Nochmals vielen Dank und Küsschen
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben