hintergrundbild netbeans frame

(Firma: hinter den 7 bergen) #1957893
Lesenswert?

Hi,

ich habe mit netbeans und der gui toolbox eine oberfläche aufgebaut und 
wollte im hauptfenster  also das JFrame ein hintergrundbild einfügen. da 
netbeans das frame automtisch erstellt hat habe ich erst mal gesucht wie 
ich auf das fenster zugreifen kann. ich habe folgenden aufbau:

1
public class Main extends javax.swing.Jframe implements PropertyChangeListener{
2

3
public Main client = new Main();
4
public Image  img = Toolkit.getDefaultToolkit().getImage("/bilder/logo7.png");
5

6
public Main()
7
{
8
  initComponents();
9
  //auf folgendes reagiert er
10
  this.setTitle("Test");
11
  this.getContentPane().setBackground(Color.DARK_GRAY);
12
  this.setLocation(100,700);
13
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
14
  //und das hier geht nicht
15
  this.setIconImage(img);
16
}
17

18
public static void main(String args[]) throws IOException
19
{
20
  java.awt.EventQueue.invokeLater(new Runnable()
21
  {
22
    public void run()
23
    {
24
     client.setVisible(true);
25
    }
26
  }
27
}
28
}

nach langem suchen habe ich einen weg gefunden das hintergrundbild doch 
einzufügen undzwar über eine extra klasse:
1
  public class Backgroundpanel extends JPanel
2
{ 
3
  Image img;
4

5
  public Backgroundpanel()
6
  {
7
   loadImage();
8
  }
9

10
  @Override
11
  public void paintComponent(Graphics g)
12
  {
13
   super.paintComponent(g);
14
   int width = getWidth();
15
   int height = getHeight();
16
   int imagewidth = img.getWidth(this);
17
   int imageheight = img.getHeight(this);
18
   int x = (width - imagewidth) / 2;
19
   int y = (height - imageheight) / 2 ;
20
   g.drawImage(image,x, y, this);
21
  }
22

23
  public void loadImage()
24
 {
25
  String filename = "/bilder/logo7.png";
26
  try{
27
     URL url = getClass().getResource(filename);
28
     img = ImageIO.read(url);
29
  }catch (IOException e)
30
  {
31
   System.out.println(e);
32
  }
33
 }
34
}

und dann in der main:
1
 public Main()
2
{
3
  initComponents();
4
  this.setContentPane( new Backgroundpanel);
5
}

jetzt sehe ich das hintergrundbild zwar wenn ich das programm starte 
aber meine buttons, textareas, labels etc... sind alle verdeckt und 
nicht mehr erreichbar hoffe jemand weiß rat.
Gast #1957923
Lesenswert?

Schon probiert in deiner initComponents dein Backgroundpanel zu 
verwenden? Also da wird wohl irgendwo ein JPanel erzeugt in dem alle 
anderen Komponenten sitzen und dort stattdessen deines verwenden.

Evtl. malst du aber dein Bild trotzdem über alle anderen Komponenten -- 
aber ich würde es erstmal damit testen.
Persönliche Seite #1957938
Lesenswert?

1
 @Override
2
  public void paintComponent(Graphics g)
3
  {
4
   int width = getWidth();
5
   int height = getHeight();
6
   int imagewidth = img.getWidth(this);
7
   int imageheight = img.getHeight(this);
8
   int x = (width - imagewidth) / 2;
9
   int y = (height - imageheight) / 2 ;
10
   g.drawImage(image,x, y, this);
11
   >>> super.paintComponent(g); <<<
12
  }

Erst Bild malen, dann "componenten" zeichen lassen...
Du mußt dann nur das JPanel als "non opaque" machen mittels 
setOpaque(false)
1
//und das hier geht nicht
2
  this.setIconImage(img);
Da "geht" sehr wohl, das setzt aber, wie es auch in der Doku steht, das 
Icon des Frames...

Ein "Hintergrund" in dem Sinne macht ja bei einem Frame auch nicht soooo 
viel Sinn, können kann das aber ein JDesktopPane, welches man ggf. auch 
mittels eines DesktopPaneUI anpassen kann.
(Firma: hinter den 7 bergen) #1958061
Lesenswert?

also des rätsels lösung war folgendes: im prinzip einfach diesen aufruf

this.setContentPane( new Backgroundpanel);

vor den initComponents machen dann werden die übrigen komponenten nicht 
verdeckt.

public Main()
{
  this.setContentPane( new Backgroundpanel);
  initComponents();
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren