Bild übermalen

hury

Erfahrenes Mitglied
Hallo zusammen,

ich lade ein Bild mit:
Code:
JPanel picturepanel;
private JLabel Bild;
private ImageIcon hintergrund = new ImageIcon("feld.jpg");
....
....
....
picturepanel = new JPanel (new FlowLayout());
Bild = new JLabel(hintergrund);
picturepanel.add(this.Bild);

Nun möchte ich einen String über das Bild schreiben.
Mache ich das via

Code:
 public void paint( Graphics g ) 
  { 
    g.drawString( "TEST", 120, 60 ); 
  }

wird der Hintergrund überschrieben und nur der String sichtbar. Wie kann ich den String über den Hintergrund schreiben?

Danke
Gruss
Alex
 
Moin!

Probiers mal so:
Code:
/*
 * ImagePanel.java
 *
 * Created on 24. Juli 2007, 15:28
 */

/**
 *
 * @author  joerg weckbach
 */
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import java.awt.FlowLayout;

import java.awt.Graphics;

import javax.swing.JFrame;

public class ImagePanel extends JPanel{
    private JLabel Bild;
    private ImageIcon hintergrund = new ImageIcon("C:/Temp/temp.jpg");
    /** Creates a new instance of ImagePanel */
    public ImagePanel() {
        this.setLayout(new FlowLayout());
        JLabel bild = new JLabel(hintergrund){
            public void paintComponent(Graphics g){
                super.paintComponent(g);
                
                g.drawString("222222222222222222222", 250,250); // ueberschreibt den hintergrund des labels
            }
        };
        this.add(bild);
        
    }
    public void paint(Graphics g){
        super.paint(g);
        g.drawString("11111111111111111111111111111111111", 150,150); //ueberschreibt den hintergrund es gesamten panels
    }
    
    public static void main(String[] args){
        JFrame j = new JFrame();
        j.setSize(500,500);
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        j.getContentPane().add(new ImagePanel());
        j.setVisible(true);
    }
    
    
    
}

*grüssle*
MeinerEiner
 
Hi, ich würdes ganz anders machen...

class Leinwand extends JPanel{
Image bild;
public Leinwand(/** von mir aus hier das Bild als Arg. übergeben*/){
bild = ImageIO.read(new File(...)); //kenn sein das man hierfür ein FileOBJ braucht weiß es nich mehr genau.
}

public void paint(Graphics g){
g.drawImage(bild,0,0,x,y,this);
g.drawString("TEST",x2,y2);
}
}

Dann einfach die Klasse wie folgt einladen:

class Programm extends JFrame {
...
public Programm(...){
...
this.getContentPane().add(new Leinwand()); //optional auch einfach nur add(new Leinwand());
}
...
}

Denke das müsste klappen.
 
Hallo,

ich hab mir die anderen Beispiele nicht angeschaut, aber damit du nicht soviel ändern musst, müsstest du einfach in der paint()-Methode
Code:
super.paint(g)
aufrufen. Dadurch dass du sie überschrieben hast, werden alle Componenten nicht mehr gezeichnet. Aber wenn du super.paint() aufrufst, wird die ursprüngliche ja auch ausgeführt und somit müsste das funktionieren was du möchtest.

MFG

zEriX
 
Zurück