www.mikrocontroller.net

Forum: PC-Programmierung hintergrundbild netbeans frame


Autor: Bob Hulu (Firma: hinter den 7 bergen) (bob128)
Datum:

Bewertung
0 lesenswert
nicht 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:

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

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

public Main()
{
  initComponents();
  //auf folgendes reagiert er
  this.setTitle("Test");
  this.getContentPane().setBackground(Color.DARK_GRAY);
  this.setLocation(100,700);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  //und das hier geht nicht
  this.setIconImage(img);
}

public static void main(String args[]) throws IOException
{
  java.awt.EventQueue.invokeLater(new Runnable()
  {
    public void run()
    {
     client.setVisible(true);
    }
  }
}
}

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

  public Backgroundpanel()
  {
   loadImage();
  }

  @Override
  public void paintComponent(Graphics g)
  {
   super.paintComponent(g);
   int width = getWidth();
   int height = getHeight();
   int imagewidth = img.getWidth(this);
   int imageheight = img.getHeight(this);
   int x = (width - imagewidth) / 2;
   int y = (height - imageheight) / 2 ;
   g.drawImage(image,x, y, this);
  }

  public void loadImage()
 {
  String filename = "/bilder/logo7.png";
  try{
     URL url = getClass().getResource(filename);
     img = ImageIO.read(url);
  }catch (IOException e)
  {
   System.out.println(e);
  }
 }
}

und dann in der main:
 public Main()
{
  initComponents();
  this.setContentPane( new Backgroundpanel);
}

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.

Autor: apr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
 @Override
  public void paintComponent(Graphics g)
  {
   int width = getWidth();
   int height = getHeight();
   int imagewidth = img.getWidth(this);
   int imageheight = img.getHeight(this);
   int x = (width - imagewidth) / 2;
   int y = (height - imageheight) / 2 ;
   g.drawImage(image,x, y, this);
   >>> super.paintComponent(g); <<<
  }

Erst Bild malen, dann "componenten" zeichen lassen...
Du mußt dann nur das JPanel als "non opaque" machen mittels 
setOpaque(false)
//und das hier geht nicht
  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.

Autor: Bob Hulu (Firma: hinter den 7 bergen) (bob128)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.