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:
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:
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
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