Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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);
}
}
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?
--> 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.
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.).
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
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?
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!
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?
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);
}
}
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.
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.
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:
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) {...}
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
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.