# Jlabel mit Bild und Text darüber ?



## w00t2K (21. Jan 2008)

Hallo,

kann ein jlabel eine png datei aufnehmen als Hintergrundbild und Zugleich Text der sich über das Hintergrundbild im JLabel erstreckt?


----------



## Quaxli (21. Jan 2008)

ja


----------



## Gast2 (21. Jan 2008)

```
import java.awt.AlphaComposite;
import java.awt.Composite;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

public class ImageLabel extends JLabel{
	
	protected ImageIcon image;
	protected Dimension sizeImage;
	protected String text;
	
	public MEDJLabel(ImageIcon image) {
		super();
		this.image = image;
		init();
	}



	public MEDJLabel(ImageIcon image, String text) {
		super();
		this.image = image;
		this.text = text;
		init();
	}


	
	private void init() {
		sizeImage=new Dimension(image.getIconHeight(),image.getIconWidth());
		
	}

	public ImageIcon getImageIcon() {
		return image;
	}

	public void setImageIcon(ImageIcon image) {
		this.image = image;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D graphics2D = (Graphics2D) g;
		Composite old=graphics2D.getComposite();
		if(image!=null)
		{
			graphics2D.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f));
			graphics2D.drawImage(image.getImage(),0,0,
					sizeImage.width,sizeImage.height,null);
		}
        graphics2D.setComposite(old);
		
		
	}

	public Dimension getSizeImage() {
		return sizeImage;
	}

	public void setSizeImage(Dimension sizeImage) {
		this.sizeImage = sizeImage;
	}

}
```


----------



## L-ectron-X (21. Jan 2008)

So geht's auch. Das Bild ist hier zwar kein PNG, könnte aber genauso gut eingebaut werden.

```
import java.awt.*;
import javax.swing.*;
import java.net.*;

public class JLabelDemo extends JFrame {
   private ImageIcon icon;
   
   public JLabelDemo(String title) {
      super(title);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      
      try {
         icon = new ImageIcon(new URL("http://ichbinharmlos.de/images/bloggbox_ikeakoennenmuessen.jpg"));
      }
      catch(MalformedURLException e) {
         e.printStackTrace();
      }
      
      JLabel label = new JLabel("Labeltext");
      label.setFont(new Font("Arial", Font.BOLD, 30));
      label.setForeground(Color.RED);
      label.setIcon(icon);
      label.setIconTextGap(-200);
      add(label);
      
      pack();
      setLocationRelativeTo(null);
   }

   public static void main(String[] args) {
      new JLabelDemo("JLabelDemo").setVisible(true);
   }
}
```


----------



## w00t2K (21. Jan 2008)

@L-ectron-X: wieso ist deine variante so kurz im vergleich zu SirWaynes "Methode" ? beides macht das gleiche?


----------



## Gast (21. Jan 2008)

na weils ein Hack ist.

SirWaynes erstellt eine Komponente die als Hintergrund ein Bild hat und im Vordergrund Text. Dies hat halt den Nachteil, das es einen "organisatorischen Aufwand" zu bewältigen gibt.

L-ectron-X
Setzt einen Text und daneben ein Bild in einem JLabel.
Damit dies nun genauso aussieht setzt er die Lücke zwischen Text und Bild negativ, so das die Komponenten übereinander gezeichnet werden.

```
label.setIconTextGap(-200);
```


----------



## Gast2 (21. Jan 2008)

nur dass du bei meiner methode dein Bild skalieren kannst,bild halbdurchsichtig machen kannst und mehrer bilder einfügen kannst usw...


----------

