ubuntuusers.de

Java Swing: JButton über JPanel mit Bild

Status: Gelöst | Ubuntu-Version: Ubuntu 8.10 (Intrepid Ibex)
Antworten |

65536

Avatar von 65536

Anmeldungsdatum:
26. Dezember 2008

Beiträge: Zähle...

Wohnort: Österreich

Hallo,

ich schreibe ein Java Programm in Swing. Ich will auf einem JPanel ein Bild zeichnen und darüber soll ein normaler JButton liegen. Soweit so gut. Ich habe mir meine eigene Klasse Hintergrund geschrieben welche von JPanel abgeleitet wird:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

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


public class Hintergrund extends JPanel{

    Toolkit toolkit;
    Image image;
    
    Hintergrund(){
        super(null);
        repaint();
        
        
    }
    
    public void paint(Graphics g){
        toolkit=Toolkit.getDefaultToolkit();
        image=toolkit.getImage(getClass().getResource("bild.jpg"));
        g.drawImage(image, 0, 0, this);
    }
}

Dann habe ich in meinem Hauptprogramm ein neues Objekt Hintergrund angelegt und darauf einen JButton platziert:

1
2
3
4
5
6
7
8
9
...
this.setLayout(new BorderLayout());
h=new Hintergrund();
foobar=new JButton("Foo Bar!");
foobar.setBounds(50, 100, 200, 100);
foobar.addActionListener(this);    
h.add(foobar);
this.add(h, BorderLayout.CENTER);
...

Jetzt wird mein Bild "bild.jpg" richtigerweise auf mein h gezeichnet. Auch der Button wird richtig angelegt, nur hinter dem Bild. Wenn ich nun den Mauszeiger über die Position, wo der JButton sein sollte bewege, erscheint dieser auch.

Ich will aber, dass der JButton immer im Vordergrund ist. Was muss ich da noch ändern?

Gruß, 2¹⁶

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

xmanu

Anmeldungsdatum:
24. März 2009

Beiträge: Zähle...

Hallo,

du musst nach dem Zeichnen deines Hintergrundes noch dafür sorgen, dass die Unterkomponenten gezeichnet werden. Das geht mit:

this.paintChildren(g);

Das einfach am Schluss deiner Paint Methode aufrufen dann gehts.

Gruß xmanu

65536

(Themenstarter)
Avatar von 65536

Anmeldungsdatum:
26. Dezember 2008

Beiträge: 63

Wohnort: Österreich

Das einfach am Schluss deiner Paint Methode aufrufen dann gehts.

Danke, so gehts.

Gruß, 2¹⁶

Greebo

Avatar von Greebo

Anmeldungsdatum:
21. November 2006

Beiträge: 3443

Wohnort: 97070 Würzburg

Bei Swing sollte aus diversen Gründen übrigens lieber paintComponent(Graphics g) zum Überschreiben von Zeichenfunktionen verwendet werden...

Antworten |