Graphics.drawImage verlangsamt sich plötzlich

Morten

Mitglied
Hallo,

ich zeichne eine Bildabfolge:

Java:
public void run() {
		Graphics graphics = getGraphics();
		while (true) {
			update(graphics);
		}
	}
public void update(Graphics graphics) {
		if (doubleBufferImage == null) {
			doubleBufferImage = createImage(this.getSize().width, this.getSize().height);
			doubleBufferGraphic = doubleBufferImage.getGraphics();
		}
		doubleBufferGraphic.setColor(getBackground());
		doubleBufferGraphic.fillRect(0, 0, this.getSize().width, this.getSize().height);
		doubleBufferGraphic.setColor(getForeground());
		doubleBufferGraphic.drawImage(mapImage, 0, 0, this);
                // ... 
	}

Java:
mapImage
ist ein Image geladen aus einer *.png-Datei und dient eigentlich nur als Hintergrund. Bei // ... wird dann eigentlich noch mehr gezeichnet (die eigentliche Animation), aber der Fehler tritt schon beim einfachen Zeichnen des Hintergrunds auf:
Zu Anfang dauert die Ausführung der Zeile
Java:
doubleBufferGraphic.drawImage(mapImage, 0, 0, this);
ca. 7-8 ms. Nach gut 2000 Bildern steigt die Dauer plötzlich auf ca. 20 ms.

Woher kommt das? Und wie kann ich das verhindern? Und ist das so die beste Möglichkeit, ein fixes Hintergrundbild zu zeichnen? (Der Hintergrund wird ebenfalls mit Java erzeugt, um den Vorgang aber nicht jedes mal durchführen zu müssen hab ich das Bild als *.png abgespeichert. Weiß aber nicht, ob das so die beste Möglichkeit ist.)

Bin über jede Hilfe und Anregungen dankbar,

Morten
 

André Uhres

Top Contributor
Die Art der Bilddatei spielt eigentlich keine Rolle mehr, sobald das Bild geladen ist. Laden würde ich es mit "ImageIO.read". Vorsicht: das Bild nur einmal laden und möglichst nicht im Malcode. Gewöhnlich laden wir ein Bild im Konstruktor der Klasse. Außerdem würde ich Swing benutzen, anstatt AWT. Hier findest du eine kleine Einführung in das Malen mit Swing: Malen in Swing Teil 1: der grundlegende Mechanismus - Byte-Welt Wiki
Um die Leistung zu maximieren, können wir auch noch das "Clip"-Rechteck abfragen (g.getClipBounds()):
Java:
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        Rectangle r = g.getClipBounds();
        g2.drawImage(image, r.x, r.y, r.width + r.x, r.height + r.y,
                r.x, r.y, r.width + r.x, r.height + r.y, this);
    }
Der drawImage(..)-Aufruf, mit den angegebenen Parametern, zeichnet nur den Teil des Bildes neu, der sich mit dem Cliprechteck überschneidet. Man spricht in diesem Zusammenhang auch von der "intelligenten Maltechnik" (smart painting).
Wenn wir für die Animation mit "setLocation" das JLabel bewegen, wird vom Toolkit automatisch repaint() mit den Argumenten aufgerufen, die nur das Rechteck definieren, das aktualisieren muß (und nicht die keine-Argumente-Version, die die gesamte Komponente veranlasst, neu gezeichnet zu werden).
 
Zuletzt bearbeitet:

Morten

Mitglied
Danke für die Tipps, ich denke ich habe das jetzt entsprechend umgesetzt. Ein paar Fragen hätte ich aber noch.

Die Struktur zur Erzeugung der Animation sieht folgendermaßen aus:

Java:
	public void run() {
		while (true) {
			repaint();
			try {
				Thread.sleep(40);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

Java:
	@Override
	protected void paintComponent(final Graphics graphics) {
		super.paintComponent(graphics);
		if (doubleBufferImage == null) {
			doubleBufferImage = createImage(this.getSize().width, this.getSize().height);
			doubleBufferGraphic = doubleBufferImage.getGraphics();
		}
		doubleBufferGraphic.setColor(getBackground());
		doubleBufferGraphic.fillRect(0, 0, this.getSize().width, this.getSize().height);
		doubleBufferGraphic.setColor(getForeground());
		Rectangle r = graphics.getClipBounds();
		doubleBufferGraphic.drawImage(mapImage, r.x, r.y, r.width + r.x, r.height + r.y, r.x, r.y, r.width + r.x,
				r.height + r.y, this);
		paintChangingStuff(doubleBufferGraphic);
		graphics.drawImage(doubleBufferImage, r.x, r.y, r.width + r.x, r.height + r.y, r.x, r.y, r.width + r.x,
				r.height + r.y, this);

		framesPerSecond(graphics);
	}

Die Methode repaint() braucht ca. 0-1 ms zur Ausführung. Daher habe ich die Pause von 40 ms eingebaut, scheinbar wurden zuviele Bilder pro Sekunde gezeichnet (ruckelte stark). Aber auch wenn ich diese Pause runtersetze (auf z.B. 10 ms) komme ich nicht auf mehr als ca. 20 Frames pro Sekunde (die messe ich in paintComponent). Woher kommt das? Eigentlich müssten da ja rein rechnerisch mehr Frames rauskommen (max. 1 ms pro repaint(), 10 ms Pause => mind. 90 Frames pro Sekunde).

Außerdem besteht immer noch das Phänomen, dass sich nach einiger Zeit plötzlich die Anzahl der Frames pro Sekunde merkbar verringt und zusätzlich stockt es von Anfang ca. ein mal pro Sekunde ganz leicht. Dafür habe ich gar keine Erklärung. Kann mir da noch jemand weiterhelfen?
 

André Uhres

Top Contributor
Im gezeigten Code ist kein Anhaltspunkt für deine Probleme erkennbar. Vielleicht willst du ein kurzes, selbständiges und kompilierbares Beispiel machen, wo wir die genannten Probleme ohne Weiteres nachvollziehen können.

EDIT: bei schnell aufeinander folgenden repaints kann es allerdings sein, dass der RepaintManager zwei oder mehr repaint-Anfragen zusammenfasst. In dem Fall hast du natürlich entsprechend weniger "frames per second".
 
Zuletzt bearbeitet:

Morten

Mitglied
Ok, dann wollen wir erstmal einem Phänomen auf den Grund gehen:

Java:
package dk.dsb.resim.graphics;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class TestPanel extends JPanel {

	private Image doubleBufferImage;
	private Graphics2D doubleBufferGraphic;
	private static Image testImage;
	private static final long serialVersionUID = 1L;

	long firstFrame;
	int frames;
	long currentFrame;
	int fps;

	public TestPanel() {
		setSize(500, 500);
		setBackground(Color.WHITE);
		loadTestImage();
	}
	
	public void run() {
		while (true) {
			repaint();
			try {
				Thread.sleep(40);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	@Override
	protected void paintComponent(final Graphics graphics) {
		super.paintComponent(graphics);
		Graphics2D graphics2D = (Graphics2D) graphics;
		if (doubleBufferImage == null) {
			doubleBufferImage = createImage(this.getSize().width, this.getSize().height);
			doubleBufferGraphic = (Graphics2D) doubleBufferImage.getGraphics();
		}
		doubleBufferGraphic.setColor(getBackground());
		doubleBufferGraphic.fillRect(0, 0, this.getSize().width, this.getSize().height);
		doubleBufferGraphic.setColor(getForeground());
		Rectangle r = graphics.getClipBounds();
		doubleBufferGraphic.drawImage(testImage, r.x, r.y, r.width + r.x, r.height + r.y, r.x, r.y, r.width + r.x,
				r.height + r.y, this);
		graphics2D.drawImage(doubleBufferImage, r.x, r.y, r.width + r.x, r.height + r.y, r.x, r.y, r.width + r.x,
				r.height + r.y, this);
		framesPerSecond(graphics);
	}

	private void framesPerSecond(Graphics graphics) {
		frames++;
		currentFrame = System.currentTimeMillis();
		if (currentFrame > firstFrame + 1000) {
			firstFrame = currentFrame;
			fps = frames;
			frames = 0;
		}
		graphics.drawString(fps + " fps", 400, 400);
	}

	private void loadTestImage() {
		File testImageFile = new File("data/testImage.jpeg");
		try {
			testImage = ImageIO.read(testImageFile);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws ParseException, IOException {
		JFrame frame = new JFrame("TestFrame");
		TestPanel testPanel = new TestPanel();
		frame.setSize(1680, 1050);
		frame.getContentPane().add(testPanel, BorderLayout.CENTER);
		frame.setVisible(true);
		
		testPanel.run();
	}
}

Die benötigte Bilddatei habe ich angehängt. Entsprechend der Methode loadTestImage() abspeichern. Dann ausführen und laufen lassen... im Bild werden die Frames pro Sekunde angezeigt. Bei mir so 25 fps, nach einiger Zeit (2-3 Minuten, schwankt aber komischerweise) sackt es dann plötzlich auf 10-15 fps ab. Der Rechner arbeitet dann auch plötzlich hörbar mehr.

Danke schon mal für die Hilfe,
Morten
 

Anhänge

  • testImage.jpeg
    testImage.jpeg
    73,8 KB · Aufrufe: 34

Morten

Mitglied
Ok, Kommando zurück. Der Fehler resultiert wohl aus fehlerhaften Grafikkarten-Treibern unter Linux... ich hab gerade mal unter Windows getestet und dort tritt der Fehler nicht auf. Da muss ich wohl an anderer Stelle ansetzen (natürlich nicht das richtig Forum dafür, aber wenn mir da jemand gute Tipss geben kann, immer gerne).

Damit hätten sich die seltsamen Performance-Fehler erledigt. Es bleibt eine grundsätzliche Frage:

Welches ist der beste Weg, um in einer Animation einen statischen Hintergrund einzublenden. Ich habe bisher zwei Möglichkeiten:

1. Hintergrund jedes mal per Java neu zeichnen.

2. Hintergrund ein einziges Mal per Java zeichnen, in einer Bild-Datei abspeichern und diese Bild-Datei jedes mal zeichnen.

Dabei ist Möglichkeit 2 deutlich langsamer wie ich mittlerweile festgestellt habe. Irgendwie klingen für mich aber beide Möglichkeiten nicht gerade berauschend, gibt es da nichts Besseres?

Versuche, den animierten Teil mit durchsichtigem Hintergrund zu versehen und über ein fixes Panel zu legen sind bisher kläglich gescheitert, keine Ahnung ob eine solche Lösung von der Performance her gut wäre.

Morten
 

Morten

Mitglied
Wenn ich das richtig verstehe, werden in dem Beispiel die kompletten JComponents (TimerAnimation) auf dem Hintergrund bewegt. Ich habe ein JPanel, dessen Position immer gleich bleibt, aber immer wieder neu gezeichnet wird. Es werden sehr viele kleine Objekte gezeichnet, die sich bewegen, von daher wäre es zu aufwendig für jedes dieser Objekte einen eigenen JComponent zu erschaffen.

Meine paintComponent() des Panels auf dem die sich bewegenden Objekte gezeichnet werden:

Java:
	@Override
	protected void paintComponent(final Graphics graphics) {
		Graphics2D graphics2D = (Graphics2D) graphics;
		Composite newComposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
		graphics2D.setComposite(newComposite);
		paintTrains(graphics2D);
	}

In paintTrains(graphics2D) werden einfach ein Haufen Befehle der Form graphics2D.draw(...) aufgerufen.
Problem: Die beweglichen Objekte werden zwar immer neu gezeichnet, die alten jedoch nicht gelöscht. Wie kriege ich das hin? Und ist das so überhaupt richtig?

Und eine andere Idee. Ursprünglich sah meine paintComponent() so aus:

Java:
	@Override
	protected void paintComponent(final Graphics graphics) {
		Graphics2D graphics2D = (Graphics2D) graphics;
		Rectangle r = graphics2D.getClipBounds();
		if (doubleBufferImage == null) {
			doubleBufferImage = createImage(this.getSize().width, this.getSize().height);
			doubleBufferGraphic = (Graphics2D) doubleBufferImage.getGraphics();
		}
		doubleBufferGraphic.setColor(getBackground());
		doubleBufferGraphic.fillRect(0, 0, this.getSize().width, this.getSize().height);
		doubleBufferGraphic.setColor(getForeground());
		Map.drawTrackMap(doubleBufferGraphic);
		paintTrains(doubleBufferGraphic);
		graphics.drawImage(doubleBufferImage, r.x, r.y, r.width + r.x, r.height + r.y, r.x, r.y, r.width + r.x,
				r.height + r.y, this);
		calculateFramesPerSecond();
	}

Dabei wird eben jedes Mal der Hintergrund neu gezeichnet (Map.drawTrackMap(doubleBufferGraphic)). Ist es nicht möglich, folgendermaßen vorzugehen:
1. Beim ersten Aufruf von paintComponent den Hintergrund zeichnen und abspeichern.
2. Bei jedem weiteren Aufruf von paintComponent graphics mit dem abgespeicherten Hintergrund überschreiben und dann den Rest drüberzeichnen

Ich hab das natürlich schon versucht, aber so ganz haut es nicht hin... meistens der gleiche Effekt wie oben, also neu Bilder werden gezeichnet, alte sind aber nicht gelöscht.

Wäre über weitere Hilfe sehr froh :)
 

Morten

Mitglied
Das muss ich mir dann mal genauer anschauen, ganz so einfach ist es definitiv nicht. Die beweglichen Objekte müssen dynamisch gedreht, verkleinert, vergrößert und inhaltlich anders gefüllt werden können. Außerdem gibt es Verbindungslinien zwischen manchen Objekten. Spätestens die kann ich ja kaum noch mit JComponents umsetzen.

Wie siehts denn mit meiner anderen Idee aus? Wo ist da der Denkfehler?
 

Ein Keks

Bekanntes Mitglied
naja gibt schon genug gründe nicht von JComponent zu erben.... so 83 Stück^^

Morten hat gesagt.:
Die beweglichen Objekte werden zwar immer neu gezeichnet, die alten jedoch nicht gelöscht. Wie kriege ich das hin?
Einfach den Hintergrund übermalen entweder mit super.paintComponent(graphics) -> einfarbig getBackground oder mit drawImage(...) und halt deinen Hintergrundbild (BufferedImage sollte dabei zumindest unter Windows schnell genug sein da dort eine Kopie im VRAM erstellt wird; von Image soweit ich weiß nicht)

Morten hat gesagt.:
Und eine andere Idee. Ursprünglich sah meine paintComponent() so aus:
ähm Swing hat bereits DoubleBuffering du kannst also stinknormal das übergebene Graphics Object zum zeichnen verwenden, das (Buffered)Image ist nicht notwedig

falls wirklich akute Performance Probleme sind endweder auf Active Rendering umsteigen (Stichwort BufferStrategie), die Details verringern (ok nicht die beste Lösung) oder OpenGL verwenden (viel komplizierter...)

ach und niemals den EDT schlafenlegen^^
 
Zuletzt bearbeitet:

Morten

Mitglied
Danke für die ganzen Anregungen. Zwei Fragen dazu:

1. Ich arbeite unter Linux. Gilt da das gleiche für BufferedImage?

2. Und was genau meinst du mit "EDT nicht schlafen legen"? Meinst du Thread.sleep in der run()? Eher mit Thread.yield() arbeiten?
 

Quaxli

Top Contributor
2. Und was genau meinst du mit "EDT nicht schlafen legen"? Meinst du Thread.sleep in der run()? Eher mit Thread.yield() arbeiten?

Dieses Konstrukt mit Panel.rum() ist nicht toll, das solltest Du in einen eingen Thread auslagern.
Klick mal auf den Link in meiner Signatur, da findest Du ein Tutorial zur Spieleprogrammierung, wo Du das abgucken kannst.
 

Quaxli

Top Contributor
Deine Lösung, die Objekte mit add() dem Hintergrundbild zuzuordnen gefällt mir wirklich gut. Sehr komfortabel. :)
Ich wäre aber durchaus geneigt dem Keks zuzustimmen und würde es nicht pauschal als grotesk verurteilen, da nichtsdestotrotz etliche unnötige Informationen "mitgeschleppt" werden.
Es wäre schön, wenn Du uns darlegst, warum es aus Deiner Sicht vorteilhafter ist von JComponent zu erben. Ich für meinen Teil lerne ja gerne noch was dazu, wenn ich überzeugt werde. :D:D:D
 

André Uhres

Top Contributor
Standardklassen "schleppen" doch in den allermeisten konkreten Awendungsfällen unnötige Informationen mit, obwohl "schleppen" ja eigentlich nicht stimmt, sie "ruhen" vielmehr im Heap und fallen kaum zur Last. Als wesentlicher Bestandteil des Swing-Malsystems profitiert JComponent automatisch von den leistungsstarken Swing-Malmechanismen. Ein weiteres Argument hast du ja schon selbst genannt: die Lösung ist sehr komfortabel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Graphics.drawImage von unten nach oben abbilden lassen AWT, Swing, JavaFX & SWT 6
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
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
G Graphics.drawImage() AWT, Swing, JavaFX & SWT 6
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
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
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
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
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
P 2D-Grafik NPE beim Zeichnen auf Graphics g AWT, Swing, JavaFX & SWT 8
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
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
T Applet graphics - zeichnen funktioniert nicht AWT, Swing, JavaFX & SWT 14
R Graphics-Object speichern AWT, Swing, JavaFX & SWT 4
S Zeichnen mit java.awt.Graphics AWT, Swing, JavaFX & SWT 6
D Graphics zeichnen AWT, Swing, JavaFX & SWT 6
M Graphics auf JFrame Koordinatensystem AWT, Swing, JavaFX & SWT 3
T Graphics Ersetzend Zeichnen AWT, Swing, JavaFX & SWT 6
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
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
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
N paintComponent für Graphics ansprechen AWT, Swing, JavaFX & SWT 2
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
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
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
S Mit Graphics g ins Fenster zeichnen AWT, Swing, JavaFX & SWT 4
G Graphics - Raute AWT, Swing, JavaFX & SWT 3
G "pinseldicke" bei Graphics? AWT, Swing, JavaFX & SWT 2
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
E Image, Graphics, verzögert zeichnen AWT, Swing, JavaFX & SWT 2
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
X Problem mit Image und Graphics AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben