KSKB zum Verständnis von Graphics und paintComponent

Status
Nicht offen für weitere Antworten.

virtualAudio

Aktives Mitglied
Hi leute,

ich melde mich mal wieder mit einem KSKB um ein Problem darzustellen, dass mich gerade beschäftigt.

Was das Miniprogi tun sollte:
Ein Rect zeichnen und dann hintereinander linien dazu zeichnen. Die linien müssen von aussen "getriggert" werden können.


Wie/Was mein Miniprogi bis jetzt tut:
ich hab es hier als applet programmiert. Es gibt eine Main und eine MYPanel Klasse.
In der Main wird das Panel ins applet geadded und ein Thread aufgerufen der einfach etwa 3x in der Sekunde eine Funktion des Panels aufruft. In dieser soll nun die Linie auf das Panel gezeichnet werden. Dieser Funktion werden immer andere Werte (for-schleife im thread) übergeben damit drawLine immer wo anders hinzeichnet.

Das Problem:
kurz gesagt - die Lines werden nicht gezeichnet.

Mein Fehler liegt wohl irgendwo da, dass ich Graphics / paintComponent etc noch nicht ganz verstanden habe.

Ich dachte, dass ich wenn ich eine zeichen-Funktion eines Graphics nutze...automatisch zu dem im Graphics gespeicherte Panel hinzugezeichnet wird. Bei repaint wird dieser im Nachhinein hinzugezeichnete Inhalt wieder "gelöscht" da eben nur paintComponent aufgeruffen wird. (-> hier würde nach meiner Vorstellung also nur das Rechteck gezeichnet und die Linien "gelöscht")

Hab mich nun ein bissl mit update, validate und so gespielt, aber irgendwo hab ich einen Denkfehler.

Es kann ja wohl nicht sein, dass ich alle Informationen irgendwo selbst zwiscehnspeichern muss um dann beim nächsten repaint mein eigenes Array mit Lines oder so aufzurufen.


die Main:
Code:
import java.applet.Applet;


public class Main extends Applet{
	
	private MyPanel myPanel;
	
	public void init(){
		
		setSize(600, 400);
		
		setLayout(null);
		myPanel = new MyPanel();
		myPanel.setLocation(0,0);
		myPanel.setSize(getWidth(),getHeight());
		add(myPanel);
		new MyThread();
	
	}
	

	private class MyThread extends Thread{
		
		MyThread(){
			start();
		}
		
		public void run(){

			for(int i = 0; i<300;i+=5){
			
				try {
					sleep(300);
				} catch (InterruptedException e) {e.printStackTrace();}
				
				myPanel.zeug(i);
				System.out.println("jetzaaaa " + i);
			}
		}
	}
}



und MyPanel:
Code:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;


public class MyPanel extends JPanel{
	
	private Graphics g = null;
	
	MyPanel(){
		
	}
	
	public void paintComponent(Graphics g){
		super.paintComponents(g);
		this.g = g;
	
		g.setColor(Color.BLACK);
		g.drawRect(100,100,400,200);
	}

	public void zeug(int n){

		if(g!=null)	{
		
			g.drawLine(100+n, 100, 100+n, 300);
		//	g.drawString(""+ n, 50, 50);
			
		}
		
	}
	
}


Die Frage nochmal in Kurzform:
Obiges Miniprogi zeichnet die Linien beim Aufruf von zeug(int n) nicht. Was mache ich falsch?

Danke für Eure Mühen!!

Mit besten Grüßen Andi
 

André Uhres

Top Contributor
Code:
class MyPanel extends JPanel{
    //"repaint" muss immer alles zeichnen können,
    //deshalb zeichnen wir auf ein Image:
    private Image image;
    private Graphics2D g2d;//Graphics Kontext vom Image
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        if (image == null) {
            image = createImage(getWidth(), getHeight());
            g2d = (Graphics2D)image.getGraphics();
            g2d.setColor(Color.white);
            g2d.fillRect(0, 0, getWidth(), getHeight());
            g2d.setColor(Color.black);
            g2d.drawRect(100,100,400,200);
        }
        //jetzt einfach zeichnen, was grad auf dem Image ist:
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
    }
    public void zeug(int n){
        //neue Linie auf das Image zeichnen:
        g2d.drawLine(100+n, 100, 100+n, 300);
        repaint();//Image neu zeichnen
    }
}
"super.paintComponents(g);" bewirkt übrigens gar nichts, da der Container keine Components enthält.
Es muss so heissen: "super.paintComponent(g);" (also hinten ohne "s")
(Zeile 17 in deiner Version von "MyPanel")
 

Marco13

Top Contributor
virtualAudio hat gesagt.:
Hi leute,
Es kann ja wohl nicht sein, dass ich alle Informationen irgendwo selbst zwiscehnspeichern muss um dann beim nächsten repaint mein eigenes Aray mit Lines oder so aufzurufen.
Kurze Antwort: Doch!
(Vorbehaltlich, dass du das vorhast, was ich vermute)

Wenn neu gezeichnet werden soll, muss u.U. ALLES neu gezeichnet werden. Und dann muss man auch wissen, was "alles" ist.
 

virtualAudio

Aktives Mitglied
Wieder einmal großen Dank an André!!
Danke auch Dir Marco,

Zum Zwischenspeichern:
ich denke die Methode von André ist perfekt geeignet (ich komme erst Abends dazu sie im eigentlichen Programm anzuwenden), das Image ist ja quasi der Zwischenspeicher.
Bei mir wird, je nach "Events" die kommen unterschiedlich auf das Image gezeichnet. Alle 5 bis 10 Sek etwa kommt dann ein Event zum Löschen der gezeichneten Daten und alles beginnt von vorne. Ich werde also auf so ein Image zeichnen und zum Löschen dann ein neues Image anlegen bzw. (ist wohl performanter) einfach dieses wieder mit der Hintergrundfarbe übermalen.

Mit besten Grüßen
Andi
 

virtualAudio

Aktives Mitglied
Noch eine Frage...wie lösch ich denn am besten, performantesten wieder was auf das Bild gezeichnet wurde?

Um also zb in diesem kskb wieder von vorn zu starten mit dem zeichnen.

lg Andi
 

André Uhres

Top Contributor
virtualAudio hat gesagt.:
..wie lösch ich denn am besten, performantesten wieder was auf das Bild gezeichnet wurde?..
Mit setColor, gefolgt von fillRect.
Code:
   public void clear(){
        g2d.setColor(Color.WHITE);//background color
        g2d.fillRect(0, 0, getWidth(), getHeight());//paint background
        g2d.setColor(Color.BLACK);//default color
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T JScrollPane nicht scrollbar (mit KSKB!) Java Basics - Anfänger-Themen 4
V Sprache umschalten mit properties-files mit KSKB Java Basics - Anfänger-Themen 3
V ganz kurzes kskb mit Problem - keine Ausgabe Java Basics - Anfänger-Themen 2
S ein paar Fragen - mit KSKB Java Basics - Anfänger-Themen 16
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
C Methoden Frage zu Verständnis eines Beispiels Java Basics - Anfänger-Themen 3
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
M Verständnis Frage Java Basics - Anfänger-Themen 11
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
T Verständnis von "final" und "static" Java Basics - Anfänger-Themen 6
U ADT verständnis Problem Java Basics - Anfänger-Themen 18
S Java Verständnis Problem Methoden etc. Java Basics - Anfänger-Themen 22
F ArrayList() Verständnis Java Basics - Anfänger-Themen 14
M Verständnis von PrintWriter Java Basics - Anfänger-Themen 12
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
F Groovy Verständnis ConfigSlurper Java Basics - Anfänger-Themen 7
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
A Dringende Bitte um Erklärungen zum besseren Verständnis Java Basics - Anfänger-Themen 4
J Verständnis Problem mit return --> Klausuraufgabe Java Basics - Anfänger-Themen 4
deimosmuc Hilfe zum Verständnis bei Vererbung Java Basics - Anfänger-Themen 11
T Verständnis-Frage Java Basics - Anfänger-Themen 2
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
E Verständnis frage zum return wert eines Arrays Java Basics - Anfänger-Themen 7
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
P Verständnis bzgl. MVC Java Basics - Anfänger-Themen 11
M Klassen und Objekte => richtiges Verständnis? Java Basics - Anfänger-Themen 6
B Exception verständnis Problem Java Basics - Anfänger-Themen 2
A Array Verständnis Frage Java Basics - Anfänger-Themen 4
L Hashtable Verständnis Frage Java Basics - Anfänger-Themen 4
M Verständnis-Problem Java Basics - Anfänger-Themen 4
H Verständnis: Methode Java Basics - Anfänger-Themen 2
Z Verständnis Java Basics - Anfänger-Themen 4
R Verständnis Java Basics - Anfänger-Themen 4
R Verständnis bei Listen Java Basics - Anfänger-Themen 2
R Verständnis Klassen Java Basics - Anfänger-Themen 9
M HILFE JPanel - Graphics Java Basics - Anfänger-Themen 1
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
I Java Klassen "Graphics" und "MouseEvent" kombinieren Java Basics - Anfänger-Themen 7
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
J Erste Schritte drawLine Methode der Graphics Klasse Java Basics - Anfänger-Themen 2
J GUI / Graphics Java Basics - Anfänger-Themen 2
H Graphics / repaint Java Basics - Anfänger-Themen 8
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Cast java.awt.Graphics Java Basics - Anfänger-Themen 7
Azazel (Anfängerhilfe) awt.Graphics Schwierigkeiten Java Basics - Anfänger-Themen 6
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
S Farbige Lebensleiste mit Graphics? Java Basics - Anfänger-Themen 10
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S G Graphics Java Basics - Anfänger-Themen 1
thet1983 g.Graphics löschen? Java Basics - Anfänger-Themen 1
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
A EAN13 Font auf graphics g erzeugt Monospaces Java Basics - Anfänger-Themen 14
N Graphics to png Java Basics - Anfänger-Themen 10
N Methode draw(Graphics g) aufrufen Java Basics - Anfänger-Themen 6
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13

Ähnliche Java Themen

Neue Themen


Oben