Forum: PC-Programmierung hintergrundbild netbeans frame


von Bob H. (Firma: hinter den 7 bergen) (bob128)


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.

von apr (Gast)


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.

von Läubi .. (laeubi) Benutzerseite


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.

von Bob H. (Firma: hinter den 7 bergen) (bob128)


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();
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.