2016-04-29 7 views
1

Dies ist mein Code:erscheint kein Bild auf JFrame erscheinen

import java.awt.BorderLayout; 
    import javax.swing.ImageIcon; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 

    public class SenzuView extends JFrame { 
     JLabel label; 
     public SenzuView(){ 
     ImageIcon image = new ImageIcon("C:\\senzu.jpg"); 
     label = new JLabel("", image, JLabel.CENTER); 
     this.add(label); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setExtendedState(JFrame.MAXIMIZED_BOTH); 
     this.setVisible(true); 
    } 
    public static void main(String[] args) { 
     new SenzuView(); 
    } 
}  

Das Problem ist, dass der Rahmen öffnet, aber seine leeren und das Bild erscheint nie Vielen Dank im Voraus

+0

Sind Sie sicher, dass die Datei existiert? Der Code zeigt das Bild, wenn ich es ausführe. – Breeze

+0

Möglicherweise müssen Sie das Label zum 'BorderLayout.CENTER' hinzufügen, damit es automatisch skaliert wird. Sie können sich den JavaDoc für weitere Informationen ansehen. – AlBlue

+0

Ich würde auch 'ImageIO.read' empfehlen, um die Bilder über' ImageIcon' zu laden (direkt), siehe [Lesen/Laden eines Bildes] (http://docs.oracle.com/javase/tutorial/2d/images /loadimage.html) für weitere Details – MadProgrammer

Antwort

1

Ich schlage vor, Sie verwenden die getClass.getResource, weil auf diese Weise, wenn Sie später das Projekt in eine JAR-Datei kompilieren werden die Bilder mit dem Projekt kommen oder sie werden nicht erscheinen, wenn Sie mit dem Lösungspfad gehen, den Sie ursprünglich gestartet haben auf.

  • Machen Sie einen Ordner in Ihrem Paket, in dem Sie Ihre Hauptklasse in befindet. Vorzugsweise genannt ‚res‘
  • zu diesem Paket Bewegen Sie Bild.
  • das Bildsymbol wie folgt initialisieren:

    ImageIcon image = new ImageIcon(getClass().getResource("res/senzu.jpg")) 
    
  • Das Folgende ist ein Beispiel dafür, wie ich vorschlagen, sollten Sie Ihre SenzuView codiert:

    public SenzuView(){ 
        setLayout(new BorderLayout()); 
        ImageIcon image = new ImageIcon(getClass().getResource("res/senzu.jpg")); 
        label = new JLabel(image); 
        this.add(label, BorderLayout.CENTER); 
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
        setLocationRelativeTo(null); 
        setExtendedState(JFrame.MAXIMIZED_BOTH); 
        setVisible(true) 
    } 
    

Ich hoffe, das es zu lösen und gab dir einige nützliche Tipps.

-1

Ich schlage vor, Sie zu erstellen ein Ordner in Ihrem Projektverzeichnis mit dem Namen Bilder. Dann geben Sie den Pfad wie folgt aus:

ImageIcon image = new ImageIcon("images/senzu.jpg");

Dies funktioniert.

Wenn Sie einen absoluten Pfad müssen dann verwenden

C:/Program Files/workspace/Senzu/images/senzu.jpg

Hoffe, dass es Ihr Problem gelöst.

+0

Warum der Downvote? Ich überprüfte den Code und es läuft und zeigt das Bild an. Bitte erkläre. – MVK059

+1

BTW - nicht der Downvoter (noch), aber ich kann nicht sehen, wie diese Antwort etwas nützliches zu einer Lösung hinzufügt. –

+0

Ich habe mit JPEG auch überprüft, es funktioniert. Und nichts zu einer Lösung sinnvoll hinzufügen bedeutet? Ich dachte, eine Antwort zu geben, die das Problem löst, war gut genug. Danke – MVK059