2016-11-05 2 views
0

Hier ist mein Code, der ein Bild und einen Knopf darunterwie man Bild zu JLabel importiert?

JFrame frame = new JFrame("Frame title"); 
frame.getContentPane().setLayout(new GridLayout(2, 3)); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.pack(); 
frame.setVisible(true); 

JLabel label = new JLabel(); 
label.setIcon(new ImageIcon("Green.png")); 
frame.add(label); 
frame.add(new JButton("SPIN")); 

Project layout

ich getan habe dies so weit, aber kein Bild erscheint auf JFrame anzeigen soll. Das Bild ist im Paket enthalten.

Antwort

0

ersetzen

label.setIcon(new ImageIcon("Green.png")); 

von

label.setIcon(new ImageIcon(YourMainClassName.class.getResource("Green.png"))); 

Dieser Code Bild relativ zu laden versucht, Sie projizieren, statt Verzeichnis, können Sie es aus ausgeführt werden. Weitere Informationen finden Sie im Abschnitt How to Use Icons im Java-Lernprogramm.

Dieser Code wird noch besser, wenn die folgende Update, das angewandt wird:

JFrame frame = new JFrame("Frame title"); 
frame.getContentPane().setLayout(new GridLayout(2, 3)); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
// Moved below 
// frame.pack(); 
// frame.setVisible(true); 

JLabel label = new JLabel(); 
label.setIcon(new ImageIcon(YourMainClassName.class.getResource("Green.png"))); 

// Added items go to content pane directly 
frame.getContentPane().add(label); 
frame.getContentPane().add(new JButton("SPIN")); 

// Moved from above 
frame.pack(); 
frame.setVisible(true); 

Beachten Sie, dass JFrame wenn keine Inhalte enthalten pack im ursprünglichen Code aufgerufen wird, so wird es versuchen, Fenstergröße zu minimieren und setVisible zeigt zuerst leeren Rahmen. Danach, wenn jede Komponente hinzugefügt wird, muss der Frame neu verteilt werden.

Modifizierter Code behebt beide Probleme: pack passt die Fenstergröße an den tatsächlichen Inhalt an und es wird nur ein Layout-Durchlauf benötigt.

Die zweite Änderung ist, wie Komponenten zum Rahmen hinzugefügt werden. Es ist besser, sie dem Inhaltsfenster von Frames hinzuzufügen, anstatt sie direkt zum Frame hinzuzufügen. Sie können weitere Informationen darüber in Using Top-Level Containers Abschnitt von Java Tutorial finden.

+0

Danke für Hilfe! Es klappt! –