Swing Mit Graphics2D auf transparentem Hintergrund zeichnen

Status
Nicht offen für weitere Antworten.

asroger

Mitglied
Moin zusammen !

Ich habe ein png-Image mit transparentem Hintergrund welches ich als Splash verwende.
Nun will ich darauf einen Fortschrittsbalken zeichnen. Sobald ich in den transparenten Bereich komme, zeigt er nix an. Was mach ich falsch ?

Java:
	public void drawSplashProgress(String msg) {
		// clear what we don't need from previous state
		graph.setComposite(AlphaComposite.Clear);
		graph.fillRect(X, textY, W, TEXT_H);
		if (barPos == 0) {
			graph.fillRect(X, barY, W, BAR_H);
		}

		// draw new state
		graph.setPaintMode();

		// draw message
		graph.setColor(Color.BLACK);
		graph.drawString(msg, X, textY + TEXT_H);

		// draw progress bar
		graph.setColor(Color.BLUE);
		graph.fillOval(X + barPos * (BAR_H + 1), barY, BAR_H, BAR_H);

		// show changes
		if (splash.isVisible()) {
			splash.update();
			barPos = (barPos + 1) % NUM_BUBBLES;
		}

	}

Besten Dank

asroger
 

Marco13

Top Contributor
Spontan hat mich das AlphaComposite.Clear irritiert (und der Blick in die API mit dem Unterschied zwischen Clear und CLEAR dann fast noch mehr :autsch: ) - kannst mal schauen ob das nicht falsch ist... wenn nicht... müßt' ich nochmal genauer schauen...
 

asroger

Mitglied
Mahlzeit !!

Damit habe ich auch schon rumexperimentiert
Java:
graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));

aber ohne Erfolg
 

Marco13

Top Contributor
Nur mit dem einen? Wie auch immer, der Codeschnipsel reicht (mir) nicht, um da genaueres dazu zu sagen...
 

asroger

Mitglied
Natürlich habe ich alle möglichen(alle) Werte vorgegeben. An dem setComposite scheint's nicht zu liegen. SObald ich mir in meinem Bild einen Bereich schaffe der nicht transparent ist und diesen beschreibe, gibt es mit folgendem Code keine Probleme:
Java:
public class KBSSPlashScreen {

	private static final int X = 20, W = 250;
	private static final int TEXT_H = 10, BAR_H = 22;
	private static final int NUM_BUBBLES = 18;

	private int textY, barY;
	private int barPos = 0;

	private final SplashScreen splash;
	private Graphics2D graph;

	public KBSSPlashScreen() {
		splash = SplashScreen.getSplashScreen();
		if (splash == null) {
			System.out.println("Error: no splash image specified on the command line");
			return;
		}

		// compute base positions for text and progress bar
		Dimension splashSize = splash.getSize();
		textY = splashSize.height - 49;
		barY = splashSize.height - 34;

		graph = splash.createGraphics();
		graph.setPaintMode();

		// drawSplashUrl(splash.getImageURL());
	}

	public void closeSplash() {
		if (splash != null) {
			splash.close();
		}
	}

	public void drawSplashProgress(String msg) {
		// clear what we don't need from previous state
		// graph.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
		// 1.0f));
		graph.setComposite(AlphaComposite.Clear);
		graph.fillRect(X, textY, W, TEXT_H);
		if (barPos == 0) {
			graph.fillRect(X, barY, W, BAR_H);
		}

		// draw new state
		graph.setPaintMode();

		// draw message
		graph.setColor(Color.BLACK);
		graph.drawString(msg, X, textY + TEXT_H);

		// draw progress bar
		graph.setColor(Color.BLUE);
		graph.fillOval(X + barPos * (BAR_H + 1), barY, BAR_H, BAR_H);

		// show changes
		if (splash.isVisible()) {
			splash.update();
			barPos = (barPos + 1) % NUM_BUBBLES;
		}

	}

}
 

Marco13

Top Contributor
OK, hab's jetzt mal getestet, und konnte es auch nachvollziehen, muss aber (und das nervt mich jetzt schon ein bißchen...) zugeben, dass ich keinen (nichtmal einen gehackten) Weg gefunden habe, das zu umgehen - selbst wenn man ihm mit Reflection ein selbsgebasteltes BufferedImage unterjubelt, malt er um's verrecken nichts da hin, wo das Eingabebild durchsichtig war :( Das scheint wohl (auch in Anbetracht der vielen native Methoden in SplashScreen) irgendwas zu sein, was ziemlich tief in der JVM steckt: Es läuft alles in die Methode SplashScreen#_update - und damit auf die native Seite, wo man keinen Einfluß mehr darauf hat.

Aber meines Erachtens könnte man das durchaus als Bug bezeichnen. Es scheint als würde bei allem, was man zeichnet, das Alpha schlicht und einfach ignoriert, und nur das von der Eingabe verwendet.

Die einzige Lösung, die mir jetzt noch einfallen würde, wäre, ein eigenes Window zu verwenden, aber damit ist Transparenz eben auch (noch) nicht so einfach möglich - mit How to Create Translucent and Shaped Windows müßte es aber hinzukriegen sein...
 

asroger

Mitglied
Danke Die für Deine Mühe !

Echt motivierte und fähige Leute hier im Forum :toll:
Werde aus Zeitgründen nun einfach einen beschreibbaren Bereich in mein Bild einfügen und dort den Fortschrittsbalken anzeigen.

Besten Dank
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
L Graphics2d zoomen AWT, Swing, JavaFX & SWT 3
L AWT graphics2d transform AWT, Swing, JavaFX & SWT 7
M Schnittpunkte zwischen zwei Graphics2D Elemente ermitteln. AWT, Swing, JavaFX & SWT 5
Soloeco Graphics2D - Verbinden zweier Punkte AWT, Swing, JavaFX & SWT 6
B Graphics -> Graphics2D etwas zu beachten? AWT, Swing, JavaFX & SWT 8
D AWT Graphics2D getClip gibt null zurück AWT, Swing, JavaFX & SWT 3
B Graphics2D Componente Drehen AWT, Swing, JavaFX & SWT 2
M Graphics2D: drawString Berechnung AWT, Swing, JavaFX & SWT 1
X AWT Graphics2D zum LWJGL Display hinzufügen aber wie? AWT, Swing, JavaFX & SWT 4
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
M JPanel und Graphics2D AWT, Swing, JavaFX & SWT 2
S Java2D/Graphics2D in Android..? AWT, Swing, JavaFX & SWT 2
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
S Graphics2D: Transparent übereinander zeichnen AWT, Swing, JavaFX & SWT 7
S Graphics2D - setClip() AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Graphics2D object in ein anderes Zeichnen AWT, Swing, JavaFX & SWT 7
S AWT Pong - Probleme mit übergreifenden Objekten && Graphics2D AWT, Swing, JavaFX & SWT 3
C Image mit Graphics2D zeichnen AWT, Swing, JavaFX & SWT 9
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
Developer_X Swing Auf ein BufferedImage mit Graphics/Graphics2D zeichnen AWT, Swing, JavaFX & SWT 6
N AWT Graphics2D mehrmals aufrufen AWT, Swing, JavaFX & SWT 5
Developer_X Swing Graphics2D.zoom, wie rückgängig machen? AWT, Swing, JavaFX & SWT 6
Developer_X Swing Graphics2D translate zerstört performance AWT, Swing, JavaFX & SWT 2
N graphics2d auf panel AWT, Swing, JavaFX & SWT 2
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
0 AWT Graphics2D.drawImage() funktioniert nicht mehr korrekt mit Core i7 AWT, Swing, JavaFX & SWT 4
A Swing LAF unter Windows: javax.swing.DebugGraphics cannot be cast to java.awt.Graphics2D AWT, Swing, JavaFX & SWT 5
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
D BufferedImage und Graphics2D AWT, Swing, JavaFX & SWT 3
cowabunga1984 Implementierung von Graphics2D AWT, Swing, JavaFX & SWT 2
C Graphics2D, Text abschneiden AWT, Swing, JavaFX & SWT 2
N Graphics2D mit unterschiedlichen Grauwerten befüllen AWT, Swing, JavaFX & SWT 3
F Graphics2D scale und Positionierung einer TextArea AWT, Swing, JavaFX & SWT 8
F JPanel: Graphics2D, scale und Mauskoordinaten AWT, Swing, JavaFX & SWT 4
P paintComponent /paint/ update/ offscreenImage / Graphics2D / AWT, Swing, JavaFX & SWT 4
M Graphics2D - abstract void draw(.) AWT, Swing, JavaFX & SWT 2
redztripe Graphics2D rotieren und rotiertes Bild abspeichern AWT, Swing, JavaFX & SWT 2
R AffinrTransform + Graphics2D verschieben AWT, Swing, JavaFX & SWT 3
R Graphics2D + Bild anzeigen. AWT, Swing, JavaFX & SWT 25
M Probleme mit Graphics2D AWT, Swing, JavaFX & SWT 7
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
M Swing Semi-Transparenter Button (normal, mouseover) auf transparentem JWindow AWT, Swing, JavaFX & SWT 44
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
S Zeichnen führt zu transparentem Frame AWT, Swing, JavaFX & SWT 6
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
algorismi JCompnent mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 4
RoliMG png datein mit transparentem hintergrund darstellen AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
1 2D-Grafik Flackerndes Hintergrund AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX HTTP Download task im Hintergrund innerhalb GUI AWT, Swing, JavaFX & SWT 70
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
F 2D-Grafik Den Hintergrund loopen AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
M Tastatureingabe im Hintergrund (JTable) AWT, Swing, JavaFX & SWT 2
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
B Swing Zähler im Hintergrund falsch berechnet - Warum? AWT, Swing, JavaFX & SWT 3
J JButton Hintergrund AWT, Swing, JavaFX & SWT 5
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
L Beim Neuzeichnen einer Swing GUI kurz Schwarzer Hintergrund AWT, Swing, JavaFX & SWT 8
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
S 2D-Grafik Bild bleibt im Hintergrund bei Diashow AWT, Swing, JavaFX & SWT 3
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
B JList transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
E Swing JPanel mit Hintergrund AWT, Swing, JavaFX & SWT 3
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
T Hintergrund AWT, Swing, JavaFX & SWT 4
T Hintergrund für 3D Erde AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
P Swing Zeichnung auf Tab im Hintergrund wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
R Bedeckter Hintergrund AWT, Swing, JavaFX & SWT 17
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JFrame (Mausrad, Hintergrund) AWT, Swing, JavaFX & SWT 13
Dragonfire Swing Hintergrund aller Komponenten verändern AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben