Hintergrundbildproblem

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Ich würde gerne ein Hintergrundbild einfügen. Aber es funktioniert einfach nicht. Ich habe mit NetBeans ein einfachen JFrame erstellt und dann folgenden Code eingefügt:

Code:
import java.awt.*;

// -- Noise.java: public class Noise:

   Image skin = Toolkit.getDefaultToolkit().getImage("skin.jpg");
    
    public void paint(Graphics g){
        loadSkin();
        if(skin != null)
            g.drawImage(skin, 0, 0, this);
    }
    
    public void loadSkin() {
        prepareImage(skin, this);
    }

Aber es wird einfach kein Hintergrundbild angezeigt... Die skin.jpg ist im gleichen Ordner.
 
B

Beni

Gast
Viel besser als direkt auf dem JFrame zu zeichnen ist folgendes:

Erbe von JComponent, und überschreibe die Methode paintComponent.
Dann füg diese neue Klasse einem JFrame hinzu.

Das hat den Vorteil:
a) es funktioniert
b) man kann Buttons, etc, auf diese neue Klasse setzen
c) man kann auch mehrere Bilder per Frame anzeigen.
 
G

Guest

Gast
Meine neue Klasse sieht jetzt so aus:
Code:
class Skin extends javax.swing.JComponent {
    Image skin1 = Toolkit.getDefaultToolkit().getImage("skin.jpg");
    public Skin() {
        
        prepareImage(skin1, this);
    }
    
    public void paintComponent(Graphics g){
        if(skin1 != null)
            g.drawImage(skin1, 0, 0, this);
    }
}

und wie füg ich die nun ein? ich hab das so gemacht: Skin makebg = new Skin(); in den konstruktor der hauptklasse.
hier mal der gesamt quelltext:

Code:
/*
 * Noise.java
 *
 * Created on 2. Juli 2004, 14:03
 */

/**
 *
 * @author  Daniel
 */
import java.awt.*;
import javax.media.*; // JMF

class Skin extends javax.swing.JComponent {
    Image skin1 = Toolkit.getDefaultToolkit().getImage("skin.jpg");
    public Skin() {
        
        prepareImage(skin1, this);
    }
    
    public void paintComponent(Graphics g){
        if(skin1 != null)
            g.drawImage(skin1, 0, 0, this);
    }
}

public class Noise extends javax.swing.JFrame {
    /** Creates new form Noise */
    public Noise() {
        Skin makebg = new Skin();
        initComponents();
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    private void initComponents() {

        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        setTitle("Noise");
        setResizable(false);
        setUndecorated(true);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-241)/2, (screenSize.height-112)/2, 241, 112);
    }
    
    
    /** Exit the Application */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        new Noise().show();
    }
    
    // Variables declaration - do not modify
    // End of variables declaration
    
}
 
B

Beni

Gast
Jaja, wenn man nur einen GUI-Builder benutzt, steht man schnell an, wenns um Basics geht...

Du kannst deinen Skin z.B. so hinzufügen:

Code:
public class Noise extends JFrame{
  public Noise(){
    initComponents();
    Skin skin = new Skin();

    getContentPane().add( skin );
  }
}
 
G

Guest

Gast
Hab ich auch gemerkt ^^
Danke, geht aber leider nicht:

java.lang.IllegalArgumentException
at org.netbeans.lib.awtextra.AbsoluteLayout.addLayoutComponent(AbsoluteLayout.java:128)
at java.awt.Container.addImpl(Container.java:664)
at java.awt.Container.add(Container.java:307)
at Noise.<init>(Noise.java:36)
at Noise.main(Noise.java:71)
Exception in thread "main"

Hier der Code mit Syntaxhighlighting: http://nopaste.php.cd/20707
 
B

Beni

Gast
Mit dieser Zeile Code:
Code:
getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
wird das Programm sowieso auf praktisch keinem System laufen!

Lösch diese Zeile einfach, danach funktioniert es (habs ausprobiert).
 
G

Guest

Gast
Hab die Zeile gelöscht, aber es geht trotzdem nicht. Man ich hab schon 200 verschiedene programmbeispiele angeschaut, und keines hat funktioniert!!!

liegt das vielleicht am netbeans 2.6 oder was? ;( ;( ;( ;( ;(
 
B

Beni

Gast
Stimmt der Pfad vom Bild?

Prüf mal in Skin nach, ob das Bild überhaupt geladen wurde, und ob seine Grösse auch nicht negativ oder 0 ist.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben