2017-04-12 3 views
0

Hinzufügen Ich versuche, ein Bild auf der ersten Registerkarte eines JTabbedPane, hier hinzuzufügen, ist mein Code:ImageIcon zu JTabbedPane

JTabbedPane application = new JTabbedApplication(); 
JPanel welcomePanel = new JPanel(); 
JLabel imageLabel = new JLabel(new ImageIcon("track.jpg")); 
welcomePanel.add(imageLabel); 
application.addTab("WELCOME", welcomePanel); 
application.setMnemonicAt(0, KeyEvent.VK_1); 

Die Bilddatei in der gleichen Position wie die Klasse befindet sich dieser Code in Aus irgendeinem Grund erscheint mein Bild jedoch nicht. Ich habe das gleiche JLabel verwendet und anstelle eines Bildes Text verwendet und es erscheint. Kann mir jemand Einblick in dieses Problem geben?

Antwort

1

Java weiß nicht, dass das Bild direkt neben der laufenden Klassendatei liegt. Sie müssen den absoluten Pfad eingeben. Was bedeutet Pfad + Dateiname.

Dieses kleine Stück Code wird Ihnen helfen, Java zu sagen, dass das Bild im aktuellen Arbeitsverzeichnis ist.

String file = new File("track.jpg").getAbsolutePath(); 

zum Code hinzugefügt snipped es wie folgt aussieht:

JTabbedPane application = new JTabbedPane(); 
JPanel welcomePanel = new JPanel(); 
String file = new File("track.jpg").getAbsolutePath(); 

JLabel imageLabel = new JLabel(new ImageIcon(file)); 
welcomePanel.add(imageLabel); 
application.addTab("WELCOME", welcomePanel); 
+0

Ich habe das versucht, aber das Bild wird immer noch nicht angezeigt. –

+0

Warum sollte die 'File' Referenz auf' String' konvertiert werden, wenn 'ImageIcon' eine' File' Referenz akzeptiert? Außerdem wäre 'ImageIO.read' generell besser zu empfehlen. – MadProgrammer

+0

Bei MadProgrammer: Nun, das war nur, weil toAbsolutePath() einen String zurückgibt. Und da ImageIcon sowohl Datei als auch String akzeptiert. Warum doppelt konvertieren? Bei Addison C: Tut mir leid, das zu hören. Ich weiß nicht, warum das nicht für dich funktioniert. Als ich es getestet habe, hat es funktioniert ... – DiabolicWords

0

Die Bilddatei wird in der gleichen Position wie die Klasse dieser Code in

liegt statt JLabel imageLabel = new JLabel(new ImageIcon("track.jpg")); die nach einer Datei im aktuellen Arbeitsverzeichnis sucht, sollten Sie Class#getResource verwenden, die eine URL zurückgibt zur eingebetteten Ressource.

Es ist wichtig zu beachten, dass Ressourcen, die im Anwendungskontext gespeichert sind (dh innerhalb des JAR oder innerhalb der Quellpakete eingebettet), nicht mehr als "Dateien" zugänglich sind.

Stattdessen könnten Sie versuchen, etwas mit wie ...

ImageIcon icon = new ImageIcon(ImageIO.read(getClass().getResource("track.jpg")); 

um das Bild zu laden. Im Gegensatz zu ImageIcon kann ImageIO.read wird eine IOException, wenn das Bild werfen nicht gelesen werden, die immer nützlicher als die Stille, die Sie erhalten von ImageIcon

Wenn dies nicht funktioniert, mehr Kontext auf die Struktur Ihrer Anwendung wird benötigt

+0

Ich triied mit diesem Code @MadProgrammer aber meine IDE beim Zusammenstellen angegeben, dass getClass() nicht gefunden werden konnte. Ich habe versucht: className.getClass(), this.getClass(), className.getResource(), this.getResource(), aber keiner von ihnen konnte richtig kompilieren. –

+0

Soooo, es klingt wie Sie versuchen, das Bild aus einem 'statischen' Kontext zu laden ... ich liebe' static', Sie könnten 'application.getClass()' verwenden, aber dies setzt voraus, dass die 'JTabbedApplication' Klasse ist im selben Paket wie das Bild. Wenn dies nicht der Fall ist, können Sie stattdessen einen absoluten Pfad vom obersten Paket zu Ihrem Bild verwenden – MadProgrammer