Kugel laufen lassen

Cosma

Aktives Mitglied
Hallo,
ich habe so einen Thread schon einmal geschrieben nur bin ich da an den Grundlagen gescheitert.
Ich will eine Kugel diagonal laufen lassen nur habe ich ein Problem, wo ich das schreiben muss, also wo das festgelegt wird.
Ich wäre dankbar für ernstgemeinte Hilfe, da ich in Schularbeit habe und von unten beginnen muss und auch etwas wirklich verstehen will.

Java:
public class Uebungsa1 extends JFrame implements ActionListener{
    JFrame hansi;
    zeichenpanel zeichnung;
    
    JButton stop;
    JButton schneller;
    JButton langsamer;
    JPanel buttonpanel;
    

   
    public static void main(String[] args) {
        Uebungsa1 projekt=new Uebungsa1();
        projekt.run();
    }
        
        public void run()
        { hansi=new JFrame();
          hansi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          zeichnung=new zeichenpanel();
          hansi.getContentPane().add(BorderLayout.CENTER,zeichnung);
          
          hansi.setBackground(Color.WHITE);
          hansi.setSize(400,400);
          
          stop=new JButton("Stop");
          schneller=new JButton("Schneller");
          langsamer=new JButton("Langsamer");
          buttonpanel=new JPanel();
          buttonpanel.add(stop);
          buttonpanel.add(schneller);
          buttonpanel.add(langsamer);
          
          hansi.getContentPane().add(buttonpanel,BorderLayout.SOUTH);
          
        hansi.setVisible(true);
             
        }
               

    @Override
    public void actionPerformed(ActionEvent e) {
        Object obj=new Object();
        
              
    }
           
        
        }

Java:
public class zeichenpanel extends JPanel {
    
    int x=0;
    int y=0;
    int vx=2;
    int vy=2;
    
    
    
    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 400, 400);
        
        g.setColor(Color.MAGENTA);
        g.fillOval(x, y, 20, 20);
        
    }
    }
 
M

Marcinek

Gast
Kommt ein Fehler?

Was passiert hier nicht?

wenn du ein Thread starten willst, dann macht man das mit der "start" methode und nicht mit run. Wenn du run ausführtst, dann ist das wie eine normale methode.

(Ich sehe gerade du hast nichtmal ein Thread (abgesehen von dem Gui Thread));(

Die bewegung der Kugel kann man in Zeichne panel machen.

Schon mal in google "java kugel animation" eingegeben?
 

Cosma

Aktives Mitglied
Danke für deine Antwort.

Ich kenne mich mit Threads überhaupt nicht aus.

--> Java Cooperation: how to move a ball - diese Seite habe ich gefunden und finde es sogar etwas verständlich aber ich weiß nicht, wie ich dann mein Programm neu aufbauen muss.

Vom Grundprinzip weiß ich wie die Kugel sich bewegt: die Koordinaten x und y immer einfach z.B.: +2 aber das drum herum fehlt mir.
 
M

Marcinek

Gast
Offensichtlich brauchst Du zwei Dinge.

1. Etwas, was periodisch das Panel neu zeichnet. ==> repaint() Aufruf auf dem panel.

2. Etwas, was die Koordinaten iwie hoch macht.

Beides könnte man mit einem easy thread machen. Und wie das geht gast du oben in dem Link erfolgreich gefunden.

while(true) ...

Du bist weit gekommen => gib nicht auf.
 

Warrior7777

Bekanntes Mitglied
Hallo ich bin hier selbst neu, probier aber mal zu hlefen.:) Sieh doch mal bei meinem Beitrag "Snake pausieren" nach; dort ist eine endlos repaint()-Schleife. Dort siehst Du auch die (hoffentlich richtige) Verwendung von threads (starten etc.).:)
 

Cosma

Aktives Mitglied
Danke für eure Hilfe doch habe ich immer noch gewaltige Probleme.

Muss ich in meiner Run-MEthode sagen, dass er 2 weiter gehen soll? Und wo binde ich ein, was passiert wenn z.B.: dann der Stop Button gedrückt wird?
Ich hab mehrere Ansätze und bring sie einfach nicht zu einem Ganzen :(
 
M

Marcinek

Gast
Hi,

was klappt den nicht?

Ja in einer neuen RUN Methode musst du die Werte erhöhn und dann das Panel neu zeichnen lassen.

Gruß,

Martin
 

Cosma

Aktives Mitglied
Java:
package uebungsa1;

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


public class Uebungsa1 extends JFrame implements Runnable{
    JFrame hansi;
    zeichenpanel zeichnung;
    Thread thread1;
    
    JButton stop;
    JButton schneller;
    JButton langsamer;
    JPanel buttonpanel;
    boolean pause=false;
int x=0;
int y=0;
int vx=2;
int vy=2;
   
    public static void main(String[] args) {
        Uebungsa1 projekt=new Uebungsa1();
        projekt.run();
        
    }
        
    @Override
        public void run()
        { 
            
            hansi=new JFrame();
          hansi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          zeichnung=new zeichenpanel();
          hansi.getContentPane().add(BorderLayout.CENTER,zeichnung);
          
          hansi.setBackground(Color.WHITE);
          hansi.setSize(400,400);
          
          stop=new JButton("Stop");
          schneller=new JButton("Schneller");
          langsamer=new JButton("Langsamer");
          buttonpanel=new JPanel();
          buttonpanel.add(stop);
          buttonpanel.add(schneller);
          buttonpanel.add(langsamer);
          
          hansi.getContentPane().add(buttonpanel,BorderLayout.SOUTH);
          
        hansi.setVisible(true);
        
        thread1=new Thread(this);
        thread1.start();
        
      
        
        }
        
        
        public void los()
        { while(pause==false)
            {repaint();
            x=vx;
            y=vy;
            
            
            }
        }
        
         }

Java:
package uebungsa1;

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


public class zeichenpanel extends JPanel {
    
    int x=0;
    int y=0;
    int vx=2;
    int vy=2;
    
    
    
    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 400, 400);
        
        g.setColor(Color.MAGENTA);
        g.fillOval(x, y, 20, 20);
         
    }
    }

Ich hab jetzt einmal das hier und steh total an...
Was ist falsch beziehungsweise was ist mein nächster Schritt?
 
M

Marcinek

Gast
serVisible(true) ist ein blockierender aufruf. Der Code danach wird erst ausgeführt, wenn du das Fenster schließt.
 
T

triopsfreak

Gast
Java:
public static void main(final String... ar) {
		final JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		System.out.println("Hier gehts weiter!");
	}
Also bei mir wird [c]Hier gehts weiter![/c] ausgegeben, auch wenn ich das Fenster nicht vorher schliesse!
 
M

Marcinek

Gast
Naja dann, müsste sich das Fenster einfach zwei mal öffnen.

Aber die MEthode los() wird nicht ausgeführt.
 
T

triopsfreak

Gast
Wenn das Fenster schon offen ist und setVisible(true) aufgerufen wird, passiert nichts, das Fenster ist ja schon offen :)
 
M

Marcinek

Gast
Es wird aber zwei mal
Code:
 hansi=new JFrame();
gemacht da da drauf setVisible();
 

Cosma

Aktives Mitglied
So ich habe jetzt weiterhin Hilfe bekommen. Ich bekomme keine Fehlermeldung und es zeigt keine Fehler an, aber die Kugel läuft nicht.
Könnt ihr mir bitte helfen?

Java:
public class Uebungsa1 extends JFrame implements ActionListener{
    JFrame hansi;
    zeichenpanel zeichnung;
    Thread thread1;

    
    JButton stop;
    JButton schneller;
    JButton langsamer;
    JPanel buttonpanel;
    boolean run =true;
    JPanel panel1=new zeichenpanel();

     int x;
    int y;
int speed;
   
    public static void main(String[] args) {
        Uebungsa1 projekt=new Uebungsa1();
        projekt.start();
        
    }

   
        public void start()
        { 
            int a=1;
            int b=1;

            
            
            hansi=new JFrame();
          hansi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          zeichnung=new zeichenpanel();
          hansi.getContentPane().add(BorderLayout.CENTER,zeichnung);
          
          hansi.setBackground(Color.WHITE);
          hansi.setSize(400,400);
          
          stop=new JButton("Stop");
          schneller=new JButton("Schneller");
          langsamer=new JButton("Langsamer");
          buttonpanel=new JPanel();
          buttonpanel.add(stop);
          buttonpanel.add(schneller);
          buttonpanel.add(langsamer);
          
          hansi.getContentPane().add(buttonpanel,BorderLayout.SOUTH);
          
        hansi.setVisible(true);
        
        while(run==true)
        {  
         try
         {
             Thread.sleep(100);
         }
         catch(Exception e){}
 panel1.repaint();
  
  zeichnung.x+=2*a;  
  zeichnung.y+=2*b;

        
  
        }
       
            }

    @Override
    public void actionPerformed(ActionEvent e)   {
        Object obj = e.getSource();
      if(obj==langsamer)   
      {
      speed=speed+=5;
              speed=speed+=5;
      }
      
      if(obj==schneller)  // geschw erhöhen
      {speed=speed-=5;
     speed=speed-=5;
      
      }
    if(obj==stop)
    {run=false;}
      
      }
      
}

Java:
public class zeichenpanel extends JPanel {
    
 int x=0;
    int y=0;
    int speed=20;
    
    
    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 400, 400);
        
        g.setColor(Color.MAGENTA);
        g.fillOval(x, y, 20, 20);
         
    }
    
    
    
    
    
    
    }
 

Warrior7777

Bekanntes Mitglied
Benutze doch anstatt Start() einen Konstruktor. Damit Dein Programm reagieren kann, musst Du Listener bei den Buttons registrieren. Hier also this.
 

Warrior7777

Bekanntes Mitglied
Start überschreibt die gleichnamige Methode von Thread. Wie schon gesagt, verlager die Aktionen dort auf einen Konstruktor. Da Start() Run() aufruft, wird bei Dir Run() nie aufgerufen, weil Du ja Start() überschrieben hast.
 

njans

Top Contributor
Ein Thread wird generell mit einer Runnable initialisiert "... new Thread(Runnable r);"
Das Interface Runnable hat nur eine Methode: run().
Du überschreibst diese Methode. Alles, was da drin steht, wird von dem neuen Thread ausgeführt.

Vielleicht hilft die Erklärung etwas mehr :)
 

Cosma

Aktives Mitglied
Tut mir leid aber leider versteh ich immer noch nicht wirklich mehr.
Ich bin verwirrt, da ich ja keine Run-Methode habe und überhaupt nicht weiß, was ich falsch mache :noe:
 

Warrior7777

Bekanntes Mitglied
Also: ein Thread wird mit variabelname.start() gestartet. Diese Methode ruft dann run() auf. Dort solltest Du Deine Kugel zeichnen. Anschliessend sollte eine Methode aufgerufen werden, die die Koordinaten der Kugel ändern. Übrigens: Alles in Run sollte z. B. bei einem Spiel in einer Endlosschleife stehen: while(true) {...}
 

Warrior7777

Bekanntes Mitglied
Ok, hier das Vorgehen zum Erstellen eines Threads:
1.) Überschreiben der Klasse Thread (v. a. die Methode run() ) ODER Implementieren des Interfaces Runnable (auch hier run() )
2.) Starten des Threads mit variablenname.start(); --> wenn Thread überschrieben wurde ODER
variableeinesthreads.start(deinerunnableinstanz); --> wenn Runnable implementiert wurde
 

EnHancEd[]

Aktives Mitglied
Ich glaub dein Problem ist, dass du noch nicht wirklich viel Ahnung von den Wichtigen Dingen in Java hast, und dass die GUI-Programmierung erst nach den basics/ objektorientierung anzureihen ist..

Wäre vllt sinnvoller, wenn du erstmal was anderes machst.

greetz
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F JOGL - Kugel wird nicht gezeichnet Java Basics - Anfänger-Themen 2
S "Kugel" vom Rand anprallen lassen Java Basics - Anfänger-Themen 6
kulturfenster User soll Radius von Kugel bestimmen Java Basics - Anfänger-Themen 4
I Billiard Kugel Java Basics - Anfänger-Themen 4
G Punkt bz. Kugel Java Basics - Anfänger-Themen 6
S Thread - Kugel im Kreis hin-und herflitzen lassen Java Basics - Anfänger-Themen 3
B Robot auf virtuellem Desktop laufen lassen? Java Basics - Anfänger-Themen 4
1 Threads parallel laufen Java Basics - Anfänger-Themen 11
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
N Erste Schritte HelloWorld möchte einfach nicht laufen Java Basics - Anfänger-Themen 11
H For-Schleife für 60 sekunden laufen lassen Java Basics - Anfänger-Themen 1
V Wie lasse ich die for-Schleife so oft laufen wie per Scanner angegeben? Java Basics - Anfänger-Themen 3
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
C LMC laufen kriegen, welches Java brauche ich ? Java Basics - Anfänger-Themen 5
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
M Methoden zwei methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 4
O Methoden 3 Methoden gleichzeitig laufen lassen in der Console Java Basics - Anfänger-Themen 2
P SystemTray: Programm sol im Hintergrund weiter laufen Java Basics - Anfänger-Themen 30
H Path2D zerlegen und Objekt drauf "laufen" lassen Java Basics - Anfänger-Themen 11
K Erste Schritte Stoppuhr will nicht laufen Java Basics - Anfänger-Themen 3
R Funktionen Synchron laufen lassen Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
K Eine bestimmte Zeit, eine Schleife laufen lassen. Java Basics - Anfänger-Themen 4
M Bekomm altes Uni-Projekt in java nicht mehr zum laufen Java Basics - Anfänger-Themen 7
O Über Map laufen Erklärung Java Basics - Anfänger-Themen 4
F Erste Schritte Unter Windows programmieren und dann auf Linux laufen lassen Java Basics - Anfänger-Themen 4
B Durch eine Liste von Strings laufen Java Basics - Anfänger-Themen 6
P Webservice erstellen und laufen lassen Java Basics - Anfänger-Themen 1
K Durch ArrayList laufen Java Basics - Anfänger-Themen 8
M Threads, zwei methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 4
F Eclipse und LWJGL - Bringe workspace nicht zum laufen Java Basics - Anfänger-Themen 2
S Simples JNI zum laufen bringen Java Basics - Anfänger-Themen 5
G Erste Schritte von Eclipse zur Anwendung: Programme auf anderen Rechnern zum Laufen bringen Java Basics - Anfänger-Themen 4
C Vererbung Wie bekomm ich das Programm zum laufen? Java Basics - Anfänger-Themen 4
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R java-programme schneller laufen lassen Java Basics - Anfänger-Themen 41
A Nedit für Mac zum laufen bringen Java Basics - Anfänger-Themen 2
C BlueJ zum Laufen bekommen Java Basics - Anfänger-Themen 14
A JBoss-Anwendung soll im Singleton-Mode laufen Java Basics - Anfänger-Themen 6
G Poi 3.5-Final zum laufen bringen Java Basics - Anfänger-Themen 2
M Online-Java-Games offline spielen? / Jar-Files zum laufen bringen? Java Basics - Anfänger-Themen 6
D Wie bringe ich dieses Programm als .jar zum laufen ? Java Basics - Anfänger-Themen 12
D In eclipse Methode von Schnittstelle zum Laufen bringen? Java Basics - Anfänger-Themen 14
M 2 Methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 2
brainray Einfachen RMI Server bei einem Provider zum Laufen bringen Java Basics - Anfänger-Themen 3
S Schleifen zeitversetzt laufen lassen Java Basics - Anfänger-Themen 3
S Java Programm extern laufen lassen Java Basics - Anfänger-Themen 10
J Threads asynchron laufen lassen Java Basics - Anfänger-Themen 4
T Mehr Anfänger geht nicht - Wie bekomme ich das zum laufen! Java Basics - Anfänger-Themen 6
G Threads prüfen, ob diese noch laufen. Java Basics - Anfänger-Themen 3
D 2x .jar Dateien laufen lassen Java Basics - Anfänger-Themen 2
D Java auf USB-Stick einrichten um FreeMind zum laufen zu bringen Java Basics - Anfänger-Themen 4
F Wie kann man Quellcodes uber die Konsole laufen lassen? Java Basics - Anfänger-Themen 6
E Vermeiden,dass mehrere Instanzen eines Java-Programms laufen Java Basics - Anfänger-Themen 2
T will nich als Applet laufen Java Basics - Anfänger-Themen 7
J Java Programm "IR-System" laufen Java Basics - Anfänger-Themen 2
J Rekursiv muss dass laufen! Java Basics - Anfänger-Themen 11
C Nach Catch-Klausel Programm weiter laufen lassen Java Basics - Anfänger-Themen 5
M Bekomme Programm nicht zum laufen HILFEEEE! Java Basics - Anfänger-Themen 28
M Timer als Thread laufen lassen? Java Basics - Anfänger-Themen 4
H KeyAdapter/KeyListener zum laufen kriegen Java Basics - Anfänger-Themen 3
jacquipre Eine Suchmethode im Hintergrund laufen lassen (Threads?) Java Basics - Anfänger-Themen 12
lan2711 Class Dateien auf anderen Rechner zum Laufen kriegen. Java Basics - Anfänger-Themen 5
L IOTools zum Laufen bringen Java Basics - Anfänger-Themen 2
B RetroGuard zum Laufen bringen Java Basics - Anfänger-Themen 11
C Applet will nicht laufen Java Basics - Anfänger-Themen 13
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
XWing Int erstellen lassen? Java Basics - Anfänger-Themen 11
H Minimum und Maximum ausgeben lassen Java Basics - Anfänger-Themen 7
H Leere Zeilen in Textdatei löschen lassen Java Basics - Anfänger-Themen 5
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
I Verschiedenen WebApp kommunizieren lassen Java Basics - Anfänger-Themen 1
K wie kann ich alle Attribute von dem Objekt(pagode) ausgeben lassen ? Java Basics - Anfänger-Themen 3
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
HeiTim Brauche Hilfe soll ein nummeriertes Feld ausgeben lassen Java Basics - Anfänger-Themen 17
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Hallolu Pong-Spiel: Schläger schneller werden lassen Java Basics - Anfänger-Themen 9
Ray19941 Über BlueJ Textdatei selbstständig erstellen lassen Java Basics - Anfänger-Themen 2
W User zwischen Optionen wählen lassen Java Basics - Anfänger-Themen 1
TimoN11 Array -> Schleife wieder von vorne durchlaufen lassen Java Basics - Anfänger-Themen 1
W Anzahl der Zeilen ausgeben lassen Java Basics - Anfänger-Themen 20
P Nutzer entscheiden lassen, wie viele Zahlen dieser in ein Array eingeben möchte. Java Basics - Anfänger-Themen 6
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
AGW App programmiert lassen, aber Änderungen vornehmen Java Basics - Anfänger-Themen 13
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
M Auf MainJFrame Panels anzeigen lassen Java Basics - Anfänger-Themen 19
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
P Arrays "automatisch" erstellen lassen Java Basics - Anfänger-Themen 12
I Klasse selbst fortlaufend nummerieren lassen Java Basics - Anfänger-Themen 11
V_Fynn03 Kontostand anzeigen lassen von einer anderen Klasse Java Basics - Anfänger-Themen 3
L Symbo Rätsel lösen lassen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben