Applet graphics - zeichnen funktioniert nicht

tahar

Mitglied
hi leute,
ich bitte euch um eine erklärung warum funktioniert das programm nicht.
Java:
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JPanel;


public class Knoten extends JPanel{
	int x , y;
	String data;
	
	public Knoten(){
		
	}
	public Knoten(int x,int y, String data){
		this.x = x;
		this.y = y;
		this.data = data;
	}
	
	public void paintComponent(Graphics g){
		
		super.paintComponent(g);
		g.setColor(Color.red);
		g.fillOval(x,y,30,30);
		g.setColor(Color.BLACK);
		g.drawString(data, x+10, y+30/2);
		System.out.println(data+" "+x +" "+y);
		this.revalidate();
		
		
	}
	public String getData(){
		return data;
	}

}

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.JPanel;


public class Visualisierung extends JPanel {
	Dimension animation = new Dimension(600,300);
	//Thread myThread ;
	Vector<Integer> vektor;
	Knoten knoten;
	
	public Visualisierung(){
		this.setPreferredSize(animation);
		this.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.red));
		vektor = new Vector<Integer>();
		for(int i=0 ; i<14 ; i++){
			vektor.add(i);
		}
		int y =0;
		for(int i=0 ; i<14 ; i++){
			knoten = new Knoten(300,y,""+vektor.get(i));
			this.add(knoten);
			System.out.println(knoten.getData());
			//knoten.repaint();
			//knoten.revalidate();
			y+=40;
		}
		
	}
}

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


public class start extends JApplet{
		
	Dimension fenster= new Dimension(1200,700);
	Visualisierung animation = new Visualisierung();
	
	public void init(){
		
		this.setSize(fenster);
		this.getContentPane().add(animation,BorderLayout.CENTER);
	}
	public void start(){
		super.start();
	}
	public void stop(){
		super.stop();
	}
}
 

tahar

Mitglied
nein aber es sollte filloval mit einer roten farbe und einer Zahl gezeigt,
leider sehe nicht auf panel nach dem Start.

dank
 

André Uhres

Top Contributor
Hallo Tahar,

die Attribute x,y der Klasse "Knoten" befinden sich außerhalb der "PreferredSize" dieser Klasse, deshalb wird nichts gezeichnet. Den Aufruf von "revalidate" innerhalb der Methode "paintComponent" solltest du außerdem entfernen.

Gruß,
André
 

André Uhres

Top Contributor
Tahar,

es liegt offensichtlich ein Denkfehler deinerseits vor:
das Problem mit deinem Code ist, dass "600" die Breite der Klasse Visualisierung ist und nicht die Breite des Knotens!!
(Ebenso ist "300" die Höhe der Klasse Visualisierung und nicht die Höhe des Knotens!!)

Gruß,
André
 
Zuletzt bearbeitet:

tahar

Mitglied
ich habe das Programm geändert damit x u. y in der Dimension beleiben, aber komme trotzdem nicht voran.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JApplet;



public class Visualisierung extends JApplet implements Runnable{
	Dimension animation = new Dimension(600,300);
	Thread myThread ;
	int[] vektor;
	
	public Visualisierung(){
		this.setPreferredSize(animation);
		vektor = new int[14];
	}
	public void init(){
		
		for(int i=0 ; i<14 ; i++){
			vektor[i]=i;
			System.out.println(""+vektor[i]);
		}
	}
	public void start(){
		myThread = new Thread(this);
		myThread.start();

	}
	public void stop(){
		myThread.stop();
	}
	@Override
	public void run() {
		int y =0,i=0;
		while(i<14){
			Graphics g = this.getGraphics();						
			g.setColor(Color.red);		
			g.fillOval(300, y, 30, 30);
			g.setColor(Color.black);
			g.drawString(""+vektor[i], 300+5,y+18);
			y+=40;
			i++;
			try {Thread.sleep(5);}						
			catch (InterruptedException e) { }
		}		
	}
}
 

tahar

Mitglied
Hallo zusammen,
ich hab bloss paintComponents() zu paint() geändert and in init() Methode repaint() aufgerufen und das klappt , meine Frage an EUCH was ist unterschied zuwischen paintComponents() und paint()??

und wenn ich graphic mit in einem Panel implementiere und das Panel mit add zum Applet hinzufüge.
sehe nix. woran kann das liegen ????

danke im Voraus
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JApplet;



public class Visualisierung extends JApplet {//implements Runnable{
	Dimension animation = new Dimension(600,300);
	//Thread myThread ;
	int[] vektor;
	
	public Visualisierung(){
		this.setPreferredSize(animation);
		vektor = new int[14];
	}
	public void init(){
		
		for(int i=0 ; i<14 ; i++){
			vektor[i]=i;
			System.out.println(""+vektor[i]);
		}
		this.repaint();
	}
	/*public void start(){
		myThread = new Thread(this);
		myThread.start();

	}
	public void stop(){
		myThread.stop();
	}*/
	public void paint(Graphics g){
		//super.paintComponents(g);
		int y =0,i=0;
		while(i<14){
		    g = this.getGraphics();						
			g.setColor(Color.red);		
			g.fillOval(300, y, 30, 30);
			g.setColor(Color.black);
			g.drawString(""+vektor[i], 300+5,y+18);
			y+=40;
			i++;
			try {Thread.sleep(5);}						
			catch (InterruptedException e) { }
		}		
	}
}
 
Zuletzt bearbeitet:

tahar

Mitglied
Moin, ich zeichen mit paintComponent(Graphics g) auf einem JPanel. ich füge das Panel zu einem Applet mit getContentPane() hinzu. beim ausführen des Programms siehe ich das Zeichen und gleich biltz schnell verschwindet. ich möchte das alles was ich zeichne aufm Applet bleibt.
bitte EUCH um HILFE.
Java:
public class zeichen extends JPanel {
	
	private static final long serialVersionUID = 1L;
	
	int[] vektor;
	Dimension zeichen= new Dimension(990,590);
	public zeichen(){
		
	}
	public zeichen(int[] v){
		setPreferredSize(zeichen);
		this.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, Color.black));
		vektor = v;
	}
	@Override
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		int y =0,i=0;
		while(i<14){
		    g = this.getGraphics();						
			g.setColor(Color.red);		
			g.fillOval(this.getWidth()/2, y, 30, 30);
			g.setColor(Color.black);
			g.drawString(""+vektor[i], this.getWidth()/2+5,y+18);
			y+=40;
			i++;
			try{
				Thread.sleep(50);
			}
			catch (InterruptedException e) { }
			}
	}
}
ublic class Algorithm {

	int[] vektor;
	zeichen graph;
	JPanel pane;
	
	public Algorithm(int[] v, JPanel pane){
		this.vektor = v;
		this.pane = pane;
		this.graph = new zeichen(vektor);
	}
	public void sort(){
		pane.add(graph,BorderLayout.CENTER);
		pane.revalidate();
	}
}
public class Visualisierung extends JApplet {
	
	private static final long serialVersionUID = 1L;
	Dimension animation = new Dimension(1000,700);
	int[] vektor;
	JPanel panel;
	Algorithm alg;
	Thread thread;
	
	public void init(){
		vektor = new int[14];
		for(int i=0 ; i<14 ; i++){
			vektor[i]=i;
			System.out.println(""+vektor[i]);
		}
		this.setSize(animation);
		this.setLayout(new BorderLayout());
		panel = new JPanel();
	  	panel.setLayout(new BorderLayout());
		this.getContentPane().add(panel);
	  	
		thread = new Thread()
		{	public void run(){
			if (Thread.interrupted())
				   return;
				try{
				alg = new Algorithm(vektor,panel);
		    	alg.sort();
				}
				catch (Exception ex){
					ex.printStackTrace();
				} 
				finally {
					thread = null;
				}
			}
		};thread.start();
	}
}
 

tahar

Mitglied
@André danke für den Link .
ich fast alles so gemacht mit getComponent(), und es wird gezeichnet was in getComponent() steht.
Aber danach bleibt das Zeichen nicht sichtbar , und wenn die Grösse des Fensters ändere taucht das Zeichnen kurz auf und verschwindet wieder, bleibt also das Applet leer. was fehlt im Code?

ich möchte eigentlich SchwarzRotBaum in Applet darstellen. aber ich bin immer bei diesem Problem geblieben.

Danke für die Hilfe
 

tahar

Mitglied
Vielen Dank, nach dem Kommentieren der Zeile 20.
es hat funktioniert.
also der Fehler ist g.getGraphics(), ich hab nach getGraphics() gesucht aber ehrlich gesagt nicht viel verstanden.

könnte jemand eine kurze Erklärung über die Funktion geben.

dankeschön.
 

Monaria

Aktives Mitglied
getGraphics()
Liefert das Graphics Objekt der Komponente.

Es besteht übrigens ein Unterschied zwischen
Code:
g.getGraphics()
&
Code:
this.getGraphics()
.
Das Erste funktioniert nicht und macht auch keinen Sinn.
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
Hallo Tahar,

es geht ja um folgende Methode:

protected void paintComponent(Graphics g)

Wenn das System die Methode "paintComponent" aufruft, ist der Parameter Graphics g mit dem passenden Zustand für das Malen auf dieser bestimmten Komponente vorkonfiguriert. Programme müssen dieses Graphics Object verwenden ... um die Oberfläche darzustellen!

(Quelle: Malen in Swing Teil 1: der grundlegende Mechanismus). (Wenn es die Umstände erfordern, können wir auch mit Graphics#create() ein neues Graphics Objekt von dem vorgegebenen Graphics g ableiten und dann dieses verwenden, was ebenfalls in dem Artikel steht.)

Gruß,
André
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
S Zeichnen mit java.awt.Graphics AWT, Swing, JavaFX & SWT 6
D Graphics zeichnen AWT, Swing, JavaFX & SWT 6
T Graphics Ersetzend Zeichnen AWT, Swing, JavaFX & SWT 6
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
S Mit Graphics g ins Fenster zeichnen AWT, Swing, JavaFX & SWT 4
E Image, Graphics, verzögert zeichnen AWT, Swing, JavaFX & SWT 2
m@nu Graphics: Per drawString() Text vertikal zentriert zeichnen AWT, Swing, JavaFX & SWT 5
N Graphics Objekte scalen mit Veränderung des Bildschirms AWT, Swing, JavaFX & SWT 19
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
R AWT Graphics initialisieren AWT, Swing, JavaFX & SWT 15
P JPanle, JFrame und Graphics AWT, Swing, JavaFX & SWT 2
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
B Graphics to Image AWT, Swing, JavaFX & SWT 3
T Swing Graphics auf Panel AWT, Swing, JavaFX & SWT 2
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
P ActionListener Graphics Einbauen AWT, Swing, JavaFX & SWT 0
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
R Swing Bewegung eines Graphics Objektes innerhalb eines JPanels funktioniert nicht richtig AWT, Swing, JavaFX & SWT 2
V Netbeans: TabbedPane, ScrollPane und Graphics AWT, Swing, JavaFX & SWT 4
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
M Graphics.fillOval AWT, Swing, JavaFX & SWT 1
javampir Sauberes Faden mit awt Graphics AWT, Swing, JavaFX & SWT 6
X AWT Text der mit Graphics "drawString(...)" geschreiben wurde wieder löschen. AWT, Swing, JavaFX & SWT 6
C Zwei Ebenen in Graphics ? AWT, Swing, JavaFX & SWT 0
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
I JavaFX Graphics Performance AWT, Swing, JavaFX & SWT 2
vodkaz Graphics aufrufen AWT, Swing, JavaFX & SWT 4
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
M Graphics.drawImage von unten nach oben abbilden lassen AWT, Swing, JavaFX & SWT 6
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
M JFrame Graphics.drawString Problem AWT, Swing, JavaFX & SWT 11
I Rechteck eines Graphics eines JPanels in einem anderen JPanel anzeigen AWT, Swing, JavaFX & SWT 7
antonbracke Multiplayer Shooter- Wie geht das mit Canvas & Graphics AWT, Swing, JavaFX & SWT 6
R Ankerpunkt bei Graphics AWT, Swing, JavaFX & SWT 3
R Fließende Bewegung von Graphics AWT, Swing, JavaFX & SWT 6
T AWT Graphics G Kein Text erscheint warum? AWT, Swing, JavaFX & SWT 12
L Graphics.drawImage() - Output-Größe entspricht nicht Parametern AWT, Swing, JavaFX & SWT 10
L Border verschwindet durch Graphics.drawImage() AWT, Swing, JavaFX & SWT 4
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
P "Graphics" wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
B Swing Zeilenumbruch in Graphics AWT, Swing, JavaFX & SWT 20
T Graphics zeichnet nicht AWT, Swing, JavaFX & SWT 2
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
M Graphics auf JFrame Koordinatensystem AWT, Swing, JavaFX & SWT 3
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
D Erzeugen eines leeren Graphics-Objektes AWT, Swing, JavaFX & SWT 7
B Anzeigefehler in GridBagLayout durch paintComponent(Graphics g) AWT, Swing, JavaFX & SWT 3
A AWT AWT Panelfenster mit Graphics kombinieren AWT, Swing, JavaFX & SWT 7
T Graphics Parameterübergabe AWT, Swing, JavaFX & SWT 3
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
M Graphics.drawImage verlangsamt sich plötzlich AWT, Swing, JavaFX & SWT 15
S Swing AWT (graphics (g)) AWT, Swing, JavaFX & SWT 27
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
B Swing Tooltips auf Graphics AWT, Swing, JavaFX & SWT 8
Ä Graphics-Komponente auf JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
E Problem bzw. Sinn von Graphics / Graphics Context AWT, Swing, JavaFX & SWT 21
S Weder ActionListener noch Graphics wollen so recht AWT, Swing, JavaFX & SWT 3
F Methode drawOval(int,int,int,int) von graphics AWT, Swing, JavaFX & SWT 4
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
G Graphics - Raute AWT, Swing, JavaFX & SWT 3
G "pinseldicke" bei Graphics? AWT, Swing, JavaFX & SWT 2
G Graphics.drawImage() AWT, Swing, JavaFX & SWT 6
D Methode Graphics g klassenübergreifend nutzen. AWT, Swing, JavaFX & SWT 3
W java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/Dev AWT, Swing, JavaFX & SWT 1
B Graphics und Canvas - Problem AWT, Swing, JavaFX & SWT 2
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
T Transparenz bei Graphics AWT, Swing, JavaFX & SWT 9
L Graphics AWT, Swing, JavaFX & SWT 37
B JPanel#paintComponent(Graphics g) << flackert oO AWT, Swing, JavaFX & SWT 3
Y Problem mit der Referenz eines Graphics-Objekts AWT, Swing, JavaFX & SWT 5
O Graphics erstellt Componente scheinbar nicht richtig AWT, Swing, JavaFX & SWT 23
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
K Gutes Buch gesucht (Graphics Only) Kennt jemand eins? AWT, Swing, JavaFX & SWT 5
K Graphics-Objekt zeichnet nicht alle Bilder AWT, Swing, JavaFX & SWT 3
J Einmal gleichzeitig auf zwei Graphics malen? AWT, Swing, JavaFX & SWT 5
N Graphics Objekt "puffern" AWT, Swing, JavaFX & SWT 7
H neuzeichnen von graphics nach minimierung oder ähnlichem AWT, Swing, JavaFX & SWT 10
G SWT Graphics Zeichnung neu laden AWT, Swing, JavaFX & SWT 13
G SWT Graphics GC Problem AWT, Swing, JavaFX & SWT 6
M Abstrakte Graphics Klasse erzeugen AWT, Swing, JavaFX & SWT 2
H awt Graphics und Image selbermachen ? AWT, Swing, JavaFX & SWT 12
D Image aus Graphics erstellen? AWT, Swing, JavaFX & SWT 2
R Graphics Objekt ändern AWT, Swing, JavaFX & SWT 11
raptorrs J2D graphics, sind 500px immer 500 px AWT, Swing, JavaFX & SWT 2
G Graphics AWT, Swing, JavaFX & SWT 2
H Graphics: Schriftgröße ändern AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben