2017-12-07 2 views
0

Ich bin neu in Swing und versuche, einen Hintergrund eines Bildes zu meinem JFrame hinzuzufügen. Meine paintComponent Methode funktioniert jedoch nicht. Könnten Sie mir bitte einige Vorschläge machen, wie ich meinen Code korrigieren kann, damit das Bild im Hintergrund erscheint?paintComponent Code funktioniert nicht

-Code unten:

// all necessary imports have been added. 
public class Menu extends JFrame { 
private Image backgroundImage; 
private JFrame frame; 

public static void main(String[] args) throws IOException { 
    Menu window = new Menu(); 
    window.frame.setVisible(true); 
} 

public Menu() throws IOException { 
    initialize(); 
} 

public void initialize() throws IOException { 

    frame = new JFrame(); 
    frame.setBounds(100, 100, 312, 294); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

} 
public void paintComponent(Graphics g) throws IOException { 
    backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 
    g.drawImage(backgroundImage, 0, 0, null); 

} 
} 

Antwort

3

paintComponent ein JFrame Aufschalten nicht sinnvoll ist, überschreibt die paintComponent seinen Inhaltsbereich statt.

Erweitern JFrame ist normalerweise auch nicht notwendig.

Schließlich wäre es besser, initialize zu verwenden, um das Bild zu laden (anstatt es bei jedem Malaufruf zu laden) und Sachen auf dem Inhaltspanel durchzuführen, wenn Sie brauchen.

setzen sie alle zusammen, finden Sie in diesem Beispiel:

public class Menu extends JPanel { 

    private Image backgroundImage; 

    public static void main(final String[] args) throws IOException { 
     Menu menu = new Menu(); 
     JFrame frame = new JFrame(); 
     frame.setContentPane(menu); 
     frame.setBounds(100, 100, 312, 294); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 

    public Menu() throws IOException { 
     initialize(); 
    } 

    public void initialize() throws IOException { 

     backgroundImage = ImageIO.read(new File("P:\\Profiles\\workspace\\Games\\Images\\matrix.jpg")); 

    } 

    @Override 
    public void paintComponent(final Graphics g){ 

     super.paintComponent(g); 
     g.drawImage(backgroundImage, 0, 0, this); 

    } 

} 
+0

Hallo danke Ihnen helfen. Es scheint jetzt zu funktionieren. Für zukünftige Referenzen könntest du erklären, warum es vorher nicht funktionierte, da ich noch neu bin und diesen Fehler nicht noch einmal machen möchte. –

+0

'JFrame' verwendet einen' JPanel' als Inhaltsbereich. Es macht keinen Sinn, die Malmethoden von 'JFrame' zu ​​überschreiben, denn das, was Sie tatsächlich sehen, ist das Inhaltsfeld des Rahmens (es befindet sich vorne und verbirgt alles, was Sie versuchen, direkt zu diesem Rahmen zu malen), also ist dies die Komponente, in der Sie sich befinden möchte das Gemälde anpassen. – Berger

+0

* "Overriding paintComponent eines JFrame ist nicht nützlich" * - Eigentlich ist es unmöglich – MadProgrammer

Verwandte Themen