Punkte nicht löschen

Tonxxx

Bekanntes Mitglied
Hallo ich möchte ein Programm schreiben in dem man einen Punkt sieht, der eine Kreisbewegung machen soll. Gut, das krieg ich hin. Doch nun will ich das der punkt nicht mehr gelöscht wird sondern einen ganzen kreis zeichnet, änlich wie ohne eine Doppelpufferung, doch wenn ich die einfach rausnehme, dann zeichnet sich der Kreis immer von vorn, wenn ich das Applet in den vordergrund nehme, und dass will ich nicht, sondern der alte Kreis soll bestehen bleiben(der Punkt jedoch weiter(nun unsichtbar) seine Kreise ziehen).

Eigentlich will ich die Planeten bahnen aufzeigen, und die sollen sich nicht immer neu zeichnen.


Theoretisch könnte ich jeden punkt in ein array speichern und dieses array dann zeichnen, doch wenn es sehr viele punkte sind, ist dass array sehr gross.....

habt ihr ne idee wie ich das anders machen könnte?
 

Tonxxx

Bekanntes Mitglied
also es ist kein Kreis oder elipse, da ich die Marsumlaufbahn um die Erde beschreiben will, und diese form nennt man Epizykloid, und diese Form schliesst sich manchmal gar nicht, darum bäuchte ich ein etwa unendlich grosses Array um diese alle zu speichern.

und zwischen jedem neuen punkt den er errechnet, mache ich einen Thread sleep damit man wirklich siet wie sich die planeten bewegen.
 

javimka

Top Contributor
Erstelle ein BufferedImage und zeichne den bewegenden Kreis immer auf dieses Image. Danach kannst du einfach das Image auf das Graphics g zeichnen.
 

Tonxxx

Bekanntes Mitglied
Ich trau mich schon fast nicht zu fragen, doch kannst du mir zeigen wie das geht?
hab mein Buch durchgeblättert und leider nichts gefunden.
und im internet hab ich auch nur gefunden wie man bilder so abspeichert.
und unter was muss ich das schreiben, gleich wie bei der Doppelpufferung in die methode update?
 

Marco13

Top Contributor
Fragen? In einem Forum? Nee, da bist du echt an der falschen Adresse. Für Fragen ist so ein forum einfach nicht da :noe:

:joke:

Es wäre gut, zu wissen, wie du bisher Zeichnest... mit AWT oder Swing oder wie... Aber hier ein paar Codeschnipsel, die den Ansatz illustrieren:
Java:
class PaintPanel extends JPanel // oder Panel, bei AWT
{
    private BufferedImage image = new BufferedImage(300,300,BufferedImage.TYPE_INT_RGB);

    public void paintComponent(Graphics g) // oder paint, bei AWT
    {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);
    }

    public void paintPointAt(int x, int y)
    {
        Graphics g = image.getGraphics();
        g.setColor(Color.RED);
        g.draw...(...);
        repaint();
    }
}

So ein PaintPanel kann man dann erstellen, ins Applet legen, und dort mit
paintPanel.paintPointAt(10,20);
Punkte reinmalen. Effizienter wäre es, direkt mit image.setRGB(...) die Pixel zu setzen, aber ... ggf. wäre es für weitere Tipps gut, wenn du genauer beschreiben würdest, wie du das ganze bisher machst...
 

javimka

Top Contributor
Ich habe dir ein Beispiel geschrieben, wie es aussehen könnte.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class PlanetOrbit extends JPanel {

	private BufferedImage buffer;
	private Graphics2D bufferG;
	private double angle;
	private double radius;
	
	public PlanetOrbit() {
		this.angle = 0.0;
		this.radius = 50;
		this.buffer = new BufferedImage(600,400,Transparency.OPAQUE);
		this.bufferG = buffer.createGraphics();
		this.bufferG.setRenderingHint(
				RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		setPreferredSize(new Dimension(600,400));
		new Timer(20,new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				angle += 0.05;
				radius += .2;
				repaint();
			}
		}).start();
	}
	
	@Override
	public void paintComponent(Graphics g) {
		int x = 300 + (int) Math.round(radius*Math.cos(angle));
		int y = 200 + (int) Math.round(radius*Math.sin(angle));
		bufferG.setColor(Color.RED);
		bufferG.fillOval(x, y, 10, 10);
		g.drawImage(buffer,0,0,null);
	}
	
	public static void main(String[] args) {
		JFrame frame = new JFrame("Planet Orbit");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.add(new PlanetOrbit());
		frame.pack();
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

}
 

Tonxxx

Bekanntes Mitglied
o vielen Dank für die Antworten, doch möchte ich ein Applet Programmieren, und muss ja extends Applet hinter meine klasse schreiben und kann nicht auch noch extends Panel schreiben, odr wie muss ich das beim Applet dann machen?
 

Michael...

Top Contributor
Schreib doch einfach eine Klasse extends JApplet und füge hier ein Objekt der Klasse (extends JPanel ein).

Java:
public class MyApplet extends JApplet {
    public void init() {
        add(new PlanetOrbit());
    }
}
 

Tonxxx

Bekanntes Mitglied
ich habe den code von michael einfach in meinen wuelltext integriert, doch irgendwie wird mein eigentliches programm nicht mehr geöffnet, sondern einfach ein weisses applet, muss ich noch etwas öffnen oder so?

denn nun wird nur noch die KLasse MyApplet geöffnet
 

Tonxxx

Bekanntes Mitglied
wenn ich nun einen konstruktor mache und dort noch einmal init() aufrufe zeichnet er mir genau ein kleines viereck ôben in der mitte anstadt er mir das ganze blau macht,
ich poste mal meinen quellcode:

Java:
import java.applet.*;
import java.awt.*;
import java.lang.*;
import java.awt.image.*;

public class Orbit1 extends Applet 
{
    public void init() {
        add(new Orbit());
    }

}

class Orbit extends Panel implements Runnable
{
	// Initialisierung der Variablen


	int appletsize_x = 600; 	// Größe des Applets in x - Richtung
	int appletsize_y = 600;		// Größe des Applets in y - Richtung

	//BufferedImage image = new BufferedImage(appletsize_x,appletsize_y,BufferedImage.TYPE_INT_RGB);

	int v1 = 11;
	int v2 = 17;
	int v3 = 25;

	double t;

	int Radius = 47;
	int radius = 27;
	int kradius = 10;

	double ex_a_m = 0.5;
	double ex_b_m = 0.25;
	double ex_a_s = 0.25;
	double ex_b_s = 0.5;

	int xm;
	int ym;

	int xs;
	int ys;

	// Variablen für die Doppelpufferung
	private Image dbImage;
	private Graphics dbg;

	public Orbit()
	{
		init();
		
	}

	public void init()
	{
		setBackground (Color.blue);

		System.out.println("init drin");
	}

	public void start ()
	{
		// Schaffen eines neuen Threads, in dem das Spiel läuft
		Thread th = new Thread (this);
		// Starten des Threads
		th.start ();
	}

	public void stop()
	{

	}

	public void destroy()
	{

	}

	public void run ()
	{
		// Erniedrigen der ThreadPriority um zeichnen zu erleichtern
		Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

		// Solange true ist läuft der Thread weiter
		while (true)
		{
			t += 0.02;

			double xmtemp = (Math.cos((v2 * t)/radius)* radius)/ ex_a_m +( Math.cos((v1 * t)/Radius) * Radius)/ ex_a_s;
			double ymtemp = (Math.sin((v2 * t)/radius)* radius)/ ex_b_m +( Math.sin((v1 * t)/Radius) * Radius)/ex_b_s;
			xm =  (int) xmtemp;
			ym =  (int) ymtemp;	

			double xstemp = (Math.cos((v1 * t)/Radius) * Radius) / ex_a_s;
			double ystemp = (Math.sin((v1 * t)/Radius) * Radius) / ex_b_s;

			xs =  (int) xstemp;
			ys =  (int) ystemp;	

			//System.out.println(Math.sqrt((Math.abs((xmtemp - xstemp)) * Math.abs((xmtemp - xstemp))) + Math.abs(((ymtemp - ystemp)) * Math.abs((ymtemp - ystemp)))));		

			// Neuzeichnen des Applets
			repaint();

			try
			{
				// Stoppen des Threads für in Klammern angegebene Millisekunden
				Thread.sleep (0);
			}
			catch (InterruptedException ex)
			{
				// do nothing
			}

			// Zurücksetzen der ThreadPriority auf Maximalwert
			Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
		}
	}

	/** Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des Bildschirmflackerns */
	public void update (Graphics g)
	{
		// Initialisierung des DoubleBuffers
		if (dbImage == null)
		{
			dbImage = createImage (this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics ();
		}

		// Bildschirm im Hintergrund löschen
		dbg.setColor (getBackground ());
		dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

		// Auf gelöschten Hintergrund Vordergrund zeichnen
		dbg.setColor (getForeground());
		paint (dbg);

		// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
		g.drawImage (dbImage, 0, 0, this);

		paint(g);
	}

	public void paint (Graphics g)
	{
		g.setColor  (Color.red);

		g.fillOval (xm + appletsize_x/2 + 1, ym + appletsize_y / 2 + 1, 2, 2);

		g.setColor  (Color.black);

		g.fillOval (appletsize_x/2 - 5, appletsize_y / 2 - 5, 10, 10);

		g.setColor  (Color.black);

		g.fillOval (xs + appletsize_x/2 + 1, ys + appletsize_y / 2 + 1, 2, 2);
	}
}

wie mache ich jetzt das mir beide klassen zu verfügung stehen Panel und Applet, damit ich nachher dann mein Buffered Image machen kann??
 

Quaxli

Top Contributor
Ändere mal den Konstruktor Deiner Klasse wie folgt:

Code:
public Orbit() {
  setBackground(Color.BLUE);
  setPreferredSize(new Dimension(600,600));
  Thread th = new Thread(this);
  th.start();
}

Deine überschriebene Update Methode bekommt nämlich immer bei getWidth() eine Größe von 10. Mit setPreferredSize() ist das erledigt.
Außerdem läuft Dein Thread nicht los, weil start() niemals aufgerufen wird. Vermutlich noch eine "Altlast" aus der Zeit als die Klasse noch ein Applet war? ;)
So wie oben läuft er dann los.

Zuletzt würde ich Dir noch Vorschlagen in den Methoden update und paint eine kleine Änderung vorzunehmen: Wenn Du mit setPreferredSize arbeitest, kannst Du getWidth() und getHeight() für die Abfrage der Panel-Dimensionen verwenden und mußt nicht auf getSize().width oder appletsize_x zurück greifen. Also zum Beispiel so:

Code:
	public void paint(Graphics g) {
		g.setColor(Color.red);
		g.fillOval(xm + getWidth() / 2 + 1, ym + getHeight() / 2 + 1, 2, 2);
  	g.setColor(Color.black);
		g.fillOval(getWidth() / 2 - 5, getHeight() / 2 - 5, 10, 10);
		g.setColor(Color.black);
		g.fillOval(xs + getWidth() / 2 + 1, ys + getHeight() / 2 + 1, 2, 2);
	}
 

Tonxxx

Bekanntes Mitglied
ich habe das alles gemacht und es läuft super, Danke viel mals, doch ist mein hintergrund nun nicht mehr Blau sondern Schwarz.

ich denke es liegt an der zeile:
Java:
        this.buffer = new BufferedImage(600,600,Transparency.OPAQUE);

ich habe OPAQUE gegoogelt und fand raus das es soviel wie unddurchlässig bedeutet.
doch nun hätte ich gerne Durchlässig, was muss ich nun anstelle von Opaque einsetzen, oder liegt es gar nicht an dem?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Random Punkte erstellen mit der Random klasse Java Basics - Anfänger-Themen 15
K Klassen Klasse erstellen, die Punkte eines Koordinatensystems repräsentiert? Java Basics - Anfänger-Themen 3
B Markieren einzelner Punkte in JFreeChart Java Basics - Anfänger-Themen 1
L0MiN Erste Schritte Neue Punkte zu einer Map hinzufügen und dauerhaft speichern? Java Basics - Anfänger-Themen 4
M Was bedeuten die Drei Punkte in einem Methodenkopf? Java Basics - Anfänger-Themen 3
J Punkte im Java-Applet verbinden Java Basics - Anfänger-Themen 4
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
P Punkte anhand 3. Koordinate vergleichen Java Basics - Anfänger-Themen 3
H Punkte werden falsch verbunden Java Basics - Anfänger-Themen 6
M Double Punkte Zeichnen Java Basics - Anfänger-Themen 7
T mehrere Punkte zeichnen ohne löschung Java Basics - Anfänger-Themen 4
J Punkte hinzufügen Tabelle Java Basics - Anfänger-Themen 5
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
O Punkte auf einem Kreis "wandern" lassen Java Basics - Anfänger-Themen 3
M Polygon Punkte im Uhrzeigersinn sortieren Java Basics - Anfänger-Themen 2
0 Auf Karte in Planquadrate Punkte zeichnen? Java Basics - Anfänger-Themen 2
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
K Punkte verschieben Java Basics - Anfänger-Themen 6
M Abstand 2er Punkte (Klassen) Java Basics - Anfänger-Themen 11
J punkte verschwinden beim neuzeichnen neuer punkte Java Basics - Anfänger-Themen 11
P Hilfe für JComboBox, bmp einbinden/bestimmte punkte auf bmp Java Basics - Anfänger-Themen 3
Z Punkte, Koordinanten, Geraden zeichnen lassen Java Basics - Anfänger-Themen 8
V String überprüfen, nur Punkte und Zahlen erlaubt Java Basics - Anfänger-Themen 7
P Anzahl der Punkte in einer IP Adresse zählen? Java Basics - Anfänger-Themen 20
B 2D Punkte erstellen und ihre Länge berechnen/Problem this. Java Basics - Anfänger-Themen 3
J Punkte Noten zuweisen Java Basics - Anfänger-Themen 6
G Kann man in einem Dokument alle Kommas in Punkte umwandeln? Java Basics - Anfänger-Themen 10
M Datumsausgabe als String ohne Punkte erzeugen! Java Basics - Anfänger-Themen 5
T Matrix - äußerste Punkte pro Zeile Java Basics - Anfänger-Themen 7
A Punkte automatisch verbinden? Java Basics - Anfänger-Themen 3
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
K warum kann ich das Objekt nicht erstellen ? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben