Label auf Panel auf Panel mit Grafiken als Hintergrund (awt)

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo

ich muss in meinem Projekt awt verwenden. Kein swing oder swt ist möglich.

Gerade baue ich ein Layout. In einem Panel (Hintergrund Panel) liegt eine Grafik. Das wird so aufgebaut:

Code:
public class ImagePanel extends Panel {
	private static final long serialVersionUID = -6364883255675338017L;
	private Image myImage = null;
	private Color myColor = null;
	private int panelWidth = 0;
	private int panelHeigth = 0;
	
	public ImagePanel (String i, int xPos, int yPos, int r, int g, int b, boolean opaque) {
		super();
		
		//set background if opaque = true
		if (opaque) {
			myColor = new Color(r, g, b);
			this.setBackground(myColor);
			System.out.println("set color imagepanel");
		}
		
		//read image
		myImage = getToolkit().getImage(i);
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(myImage, 0);
		try {
			mt.waitForAll();
		} catch (InterruptedException ex) {
		}

	    panelWidth = myImage.getWidth(this);
	    panelHeigth = myImage.getHeight(this);
	    
	    //set position
	    this.setLayout(null);
		this.setBounds(xPos, yPos, panelWidth, panelHeigth);
	}
	
	public void paint (Graphics g) {
		Graphics2D myGraphics2D = (Graphics2D) g;

	    //set background image
		myGraphics2D.drawImage(myImage, 0, 0, null);
	}

	public Dimension getMinimumSize() {
		return new Dimension(panelWidth, panelHeigth);
	}

	public Dimension getPreferredSize() {
		return getMinimumSize();
	}
}

Ich platziere dann auf dieses Panel (Hintergrund Panel) weitere Panel (Vordergrund Panel) mit einer Grafik als Hintergrund durch die gleiche Klasse. Das funktioniert gut.

Anschliessend setze ich auf diese Vordergrund Panel Textlabel. Dazu verwende ich folgende Klasse:
Code:
public class TextLabel extends Label {
	private static final long serialVersionUID = -6364883255675338017L;
	private Panel myPanel = null;
	private int panelWidth = 0;
	private int panelHeigth = 0;
	
	public TextLabel (String t, Panel p, int xOff, int yOff, int rFront, int gFront, int bFront, 
int rBack, int gBack, int bBack, boolean opaque) {
		super(null);
		
		//variables
		myPanel = p;
	    panelWidth = myPanel.getWidth();
	    panelHeigth = myPanel.getHeight();
	    
		//write text
		this.setText(t);
		
		//set background if opaque = true
		this.setForeground(new Color(rFront, gFront, bFront));
		if (opaque) {
			this.setBackground(new Color(rBack, gBack, bBack));
			System.out.println("set color textlabel");
		}
	    
	    //set font
	    this.setFont(new Font("Serif", Font.PLAIN, 16));
	    
	    //set location and layout
		this.setBounds(xOff, yOff, panelWidth, panelHeigth);
	    myPanel.add(this); // myPanel ist das Vordergrund Panel
	}

}

Jetzt mein Problem.

Ich habe im Hintergrund Panel keine Background Color angegeben. Nur die Grafik als Hintergrund. Selbes für das Vordergrund Panel.

Wenn ich Label auf meinem Vordergrund Panel platziere, stehen diese auf einem einfarbigen Hintergrund. Dieser ist weiss und erstreckt sich nur im Bereich des Vordergrund Panels. Dabei ist setBounds im Vordergrund Panel dafür verantwortlich wie gross dieser Bereich ist. Wenn ich setBounds entferne, verschwindet das Label, wenn ich es verkleinere, wird das Label (inkl. farbigem Hintergrund kleiner).

Woher kommt dieser einfarbige Hintergrund war für mich die Frage? Daher habe ich beim Hintergrund Panel die Farbe zum Test mal auf Grün gesetzt und nun steht mein Label auf einem grünen Hintergrund.

Ich hätte das Label gerne transparent und zwar so, dass es auf meinem Vordergrund Panel platziert ist welches wiederrum auf meinem Hintergrund Panel ist. Ich benutze für diese Anwendung ein setLayout(null).

Versteht man das und hat vielleicht jemand eine Idee?

Danke,
wimpf
 
G

Guest

Gast
Danke Quaxli für die Antwort. Aber ich kann mein swing benutzen und meines Wissens nach get setOpaque bei awt nicht.

wimpf
 

Tobias

Top Contributor
Ohne den "großen Plan" verstanden zu haben:

super.paint(), damit das Panel seinen Hintergrund zeichnet.

mpG
Tobias
 
G

Guest

Gast
Ich weiss, dass man das Problem nicht wirklich verstehen kann. Daher hier mal ein Screenshot.



Das Hintergrund Panel ist die Grafik mit "m-calendar" darauf. Diese Grafik geht über die komplett sichtbare Fläche.
Auf diesem Panel ist immer pro Kalender Eintrag ein Vordergrund Panel (blau-schwarzer Farbverlauf). Darauf dann immer ein kleines rotes Kreuz (als Grafik zurzeit auf weissem Hintergrund) und das Datum in grün.

Problem ist, dass das grüne Datum auf der Grafik (die mit dem Farbverlauf) liegen sollte und nicht auf einer weissen Fläche. Ich bekomme es einfach nicht hin, die weisse Fläche verschwinden zu lassen.

Habt Ihr eine Idee?
wimpf
 

André Uhres

Top Contributor
Ich hab das nur überflogen, aber wenn ich richtig verstehe, dann willst du ein durchsichtiges Label haben,
bei dem der Hintergrund durchscheint. Das geht nicht, wenn du "Label" erweiterst.
"Label" ist "heavyweight" und daher immer undurchsichtig.
"Lightweight" Komponenten kannst du erstellen, indem du von java.awt.Component oder java.awt.Container ableitest
und die Komponente in der paint Methode selbst zeichnest (im Fall eines Textlabels mit "Graphics#drawString").
Siehe auch: lightweight und Transparenz
 
W

wimpf

Gast
Also ich komme mit diesem Panel nun zurecht:
Code:
package ...

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.image.ImageObserver;

public class ImagePanel extends Panel implements ImageObserver{
	private static final long serialVersionUID = -6364883255675338017L;
	private Image myImage = null;
	private Color myColor = null;
	private int panelWidth = 0;
	private int panelHeigth = 0;
	
	private Image dbImage;
	private Graphics dbg;
	
	public ImagePanel (String i, int r, int g, int b, boolean opaque) {
		super();
		
		//set background if opaque = true
		if (opaque) {
			myColor = new Color(r, g, b);
			this.setBackground(myColor);
			System.out.println("set color imagepanel");
		}
		
		//read image
		myImage = getToolkit().getImage(i);
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(myImage, 0);
		try {
			mt.waitForAll();
			System.out.println("mt wartet auf " + i);
		} catch (InterruptedException ex) {
		}

	    panelWidth = myImage.getWidth(this);
	    panelHeigth = myImage.getHeight(this);
	    
	    //set 
	    this.setLayout(null);
	    this.setSize(panelWidth, panelHeigth);
	    this.setVisible(true);
	}
	
	public void paint (Graphics g) {
		super.paint(g);
	    //set background image
		g.drawImage(myImage, 0, 0, this);
	}

	public void update (Graphics g) {
		//initialize double buffer
		if (dbImage == null) {
			dbImage = createImage (this.getSize().width, this.getSize().height);
			dbg = dbImage.getGraphics ();
		}

		System.out.println("w "+this.getSize().width);
		System.out.println("h "+this.getSize().height);
		System.out.println("b "+getBackground ());

		//clear screen
		dbg.setColor (getBackground ());
		dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);

		//paint foreground
		dbg.setColor (getForeground());
		paint (dbg);

		//draw picture
		g.drawImage (dbImage, 0, 0, this);
	}

	public void setImage (String i) {
		//read image
		myImage = getToolkit().getImage(i);
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(myImage, 0);
		try {
			mt.waitForAll();
		} catch (InterruptedException ex) {
		}
	}
	
	public Dimension getMinimumSize() {
		Dimension temp = new Dimension(panelWidth, panelHeigth);
		return temp;
	}

	public Dimension getPreferredSize() {
		return getMinimumSize();
	}

}
 

André Uhres

Top Contributor
Ich versteh nicht ganz, was du in update machen willst,
aber egal was du dort malst, es wird bei jedem systemausgelösten
Malen wieder verschwinden (z.B. wenn deine Anwendung von einer
anderen Anwendung vedeckt wird und später wieder sichtbar wird).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Swing Label auf Panel legen.. AWT, Swing, JavaFX & SWT 2
U Java FX Zusätzliches Label per Knopfdruck während der Laufzeit auf Panel einfügen. AWT, Swing, JavaFX & SWT 2
O Swing JTree um Label (oder Panel) erweitern AWT, Swing, JavaFX & SWT 9
GUI-Programmer Informations-Panel an Label AWT, Swing, JavaFX & SWT 2
C Label an Panel anpassen. AWT, Swing, JavaFX & SWT 6
Student (Icon auf Label) -> auf Panel rechtsbündig darstellen AWT, Swing, JavaFX & SWT 11
T Label auf Label oder Panel auf Label AWT, Swing, JavaFX & SWT 8
H JavaFX Label.Text mit bind an DoubleProperty binden AWT, Swing, JavaFX & SWT 3
izoards Ausdruck auf Label Drucker AWT, Swing, JavaFX & SWT 1
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
H RPG Programmieren, label.setLocation funktioniert nicht AWT, Swing, JavaFX & SWT 7
Jose05 Javafx Label Höhe=Breite AWT, Swing, JavaFX & SWT 1
N javafx Position der Bustaben finden label AWT, Swing, JavaFX & SWT 1
N Label Schriftart Ändern javafx AWT, Swing, JavaFX & SWT 2
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
I BoxLayout zentriert Label nicht AWT, Swing, JavaFX & SWT 7
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
A Inhalt wechseln bei Klick auf Label AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX Label lässt sich innerhalb service Task nicht updaten? AWT, Swing, JavaFX & SWT 22
Trèfle JavaFX Formattierung im Label AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Wie Text Label in neuem Window von Main Stage setzen? AWT, Swing, JavaFX & SWT 6
F Countdown in Label anzeigen AWT, Swing, JavaFX & SWT 14
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
J Dateiname im Label einblenden AWT, Swing, JavaFX & SWT 4
C SWT autosize bei gc.drawString() auf einem Label AWT, Swing, JavaFX & SWT 7
xYurisha Aus einer Gui Buttons, Label und ProgessBars entfernen AWT, Swing, JavaFX & SWT 4
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann NullPointerException bei Label.setText() AWT, Swing, JavaFX & SWT 5
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
Kanda Sorata Inhalt einer .txt Datei einlesen und in ein Label einfügen (JavaFX) AWT, Swing, JavaFX & SWT 2
L JavaFX ContextMenu bei Label mit Linksklick AWT, Swing, JavaFX & SWT 4
J JavaFX - Felder (Label) in einer ForSchleife bearbeiten AWT, Swing, JavaFX & SWT 4
N Anordnung der Label AWT, Swing, JavaFX & SWT 3
D JavaFX Label lässt sich nicht mehrmals färben AWT, Swing, JavaFX & SWT 7
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
M Text in einem Label fett setzen AWT, Swing, JavaFX & SWT 4
D Swing JFreeChart Crosshair Label - setPreferredSize oder ähnliches, aber wo ? AWT, Swing, JavaFX & SWT 1
T CSS Rechtsbüdniges Label mit Zwei Zeilen AWT, Swing, JavaFX & SWT 7
J JavaFX Translation Text/Label AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX Text oder Label benutzen AWT, Swing, JavaFX & SWT 4
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
B Swing JXMapKit Mausemove in Label anzeigen AWT, Swing, JavaFX & SWT 0
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
G Label wird nicht erstellt AWT, Swing, JavaFX & SWT 0
7 AWT problem: KeyListener/ test im Label umändern AWT, Swing, JavaFX & SWT 4
W JavaFX Label in Controller-Klasse in einer anderen Controller-Klasse ändern AWT, Swing, JavaFX & SWT 9
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
G Label erstellen AWT, Swing, JavaFX & SWT 6
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
F JavaFX label.getWidth() AWT, Swing, JavaFX & SWT 2
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
R JavaFX Label ändern in aufgerufener AnchorPane AWT, Swing, JavaFX & SWT 3
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
G JavaFX CSS: Label in GridPane rechts ausrichten AWT, Swing, JavaFX & SWT 9
T Swing Aktuelle Größe eines Textes in einem Label darstellen AWT, Swing, JavaFX & SWT 3
KrokoDiehl Swing Buchstaben im Label anders färben AWT, Swing, JavaFX & SWT 4
K Zugriff auf Label und Ereignisbehandlung durch zwei Handlerklassen AWT, Swing, JavaFX & SWT 3
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
C Label wird nicht an der richtigen Position angezeigt.. AWT, Swing, JavaFX & SWT 7
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
E Netbeans: Buttons mit Label bzw. Rahmen unterlegen AWT, Swing, JavaFX & SWT 8
J resize - Label bleibt erst schwarz AWT, Swing, JavaFX & SWT 4
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
N Label auf Hauptfenster manipulieren AWT, Swing, JavaFX & SWT 2
S VAADIN: Problem mit Label AWT, Swing, JavaFX & SWT 18
P Ausgabe Label AWT, Swing, JavaFX & SWT 6
S ImageIcon von Label entfernen AWT, Swing, JavaFX & SWT 9
B Label breite ermitteln vor dem rendern? AWT, Swing, JavaFX & SWT 7
A Bekomme das Label nicht in die Mitte von Reihe AWT, Swing, JavaFX & SWT 7
H SWT Markierbares Label AWT, Swing, JavaFX & SWT 8
A Swing Box Label ausrichten AWT, Swing, JavaFX & SWT 3
R Label in den Vordergrund einblenden AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
O Swing Label(bzw. Grafik) verdekt von anderm Label AWT, Swing, JavaFX & SWT 2
A TextField und Label AWT, Swing, JavaFX & SWT 8
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B Die Werte von getLocation() im Label anzeigen AWT, Swing, JavaFX & SWT 4
Avalarion SWT Listener auf Label oder Text Teile AWT, Swing, JavaFX & SWT 10
C Label Hintergrundbild mit Text AWT, Swing, JavaFX & SWT 6
A SWT - Farbe von Text auf Label ändern AWT, Swing, JavaFX & SWT 2
M gridbaglayout - abstand bei label und field AWT, Swing, JavaFX & SWT 8
hdi SWT Label Text vertikal zentrieren AWT, Swing, JavaFX & SWT 6
T In einem Label scrollen AWT, Swing, JavaFX & SWT 3
Spot84 swt label zeilenumbruch will nicht funktionieren AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben