# Farbverlauf als Hintergrund eines JLabels



## jptc.org (11. Aug 2004)

Hallo,

kennt jemand eine Möglichkeit ein JLabel mit einem Farblauf als Hintergrund zu füllen und dabei gleichzeitig den Text antialised darzustellen?

Momentan bekomme ich nur den Text geändert (Text antialised, Textfarbe als Farbverlauf..) aber leider schaffe ich es nicht den Hintergrund zu ändern.

Vielen Dank für die Hilfe.

Karsten
http://www.java-news-center.org


----------



## Roar (11. Aug 2004)

ehm... ich weiß jetz nich genau was du mit farbverlauf meinst. aber die hintergrundfarbe kannst du mit setBackground() setzen. danach musst du das JLabel noch undurhsuchtig setzen mit setOpaque(false). 

oder willst du so einen gradient als hintergrund haben?


----------



## jptc.org (11. Aug 2004)

ich wollte einen gradient als Hintergrund haben... ich konnte das Problem jetzt lösen. Für alle die es interessiert (Methode des JLabel überschrieben):


```
public void paintComponent(Graphics g) {
		Dimension d = getSize();
		Insets ins = getInsets();
		int x = ins.left;
		int y = ins.top;
		int w = d.width - ins.left - ins.right;
		int h = d.height - ins.top - ins.bottom;

		Graphics2D g2 = (Graphics2D) g;

		paintBorder(g);

                                g2.setPaint(new GradientPaint(0, 0, new Color(77, 68, 139), d.width, 0, Color.WIDTH));
                                g2.fillRect(0, 0, d.width, d.hight);

		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

		FontRenderContext frc = g2.getFontRenderContext();
		TextLayout tl = new TextLayout(getText(), getFont(), frc);

		AffineTransform shear = AffineTransform.getShearInstance(0.0, 0.0);
		Shape src = tl.getOutline(shear);
		Rectangle rText = src.getBounds();
		
		int iconOffsetX = 0; 
		
		if (getIcon() != null) {
			iconOffsetX = getIcon().getIconWidth() + getIconTextGap();
		}

		float xText = x - rText.x + iconOffsetX + 5;
		switch (getHorizontalAlignment()) {
			case CENTER :
				xText = x + (w - rText.width) / 2;
				break;
			case RIGHT :
				xText = x + (w - rText.width);
				break;
		}
		float yText = (y + h / 2 + tl.getAscent() / 4) + 2;
		
		AffineTransform shift = AffineTransform.getTranslateInstance(xText, yText);
		Shape shp = shift.createTransformedShape(src);
		
		if (getIcon() != null) {
		   getIcon().paintIcon(this, g2, 0 , 0);
		}

		g2.setColor(getForeground());
        g2.fill(shp);

	}
```

und man erhält schönen Text (nicht so eckig wie bei StandardSwing) und hat einen Farbverlauf (gradient) als Hintergrund...  :lol: 

Karsten
http://www.java-news-center.org


----------



## Jörg (29. Sep 2005)

ok fuer die Freaks, wie krieg ich keinen linearen Verlauf, sondern nen logarithmischen oder sowas?? 

Hm der Code gefaellt mir gut, das mit dem GradientPaint und so, aber das mit dem Label an sich
check ich null, was da alles gemacht wird, vor allem stoert mich, dass er jetzt keine <html>-Strings 
mehr kann


----------



## Gast (2. Okt 2007)

Ich weiß das Thema ist alt, doch ibt es nicht einen einzeiligen Code alá Objekt.setForeground(new Gradient(StartFarbe, Entfarbe); ?

Vielen Dank


----------

