2016-11-05 55 views
0

這裏是我的代碼應該顯示的圖像和按鈕下方如何將圖像導入JLabel?

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

我到目前爲止已經做到了這一點,但沒有圖像顯示在JFrame中。圖片在包中。

回答

0

更換

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

通過

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

此代碼試圖加載相對於圖像你的項目,而不是目錄,你是從運行它。有關更多信息,請參閱Java教程中的How to Use Icons部分。

該代碼會變得更好,如果應用以下修補程序:

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); 

注意JFrame不含時pack是所謂的原代碼的內容,所以它會盡量減少窗口大小, setVisible將首先顯示空幀。之後,當添加每個組件時,框架將需要重新佈局。

修正的代碼修正了這兩個問題:pack將窗口大小調整爲實際內容,並且只需要一次佈局傳遞。

第二個變化是如何將組件添加到框架。最好將它們添加到框架內容窗格中,而不是直接添加到框架中。您可以在Java Tutorial的Using Top-Level Containers部分找到關於它的更多信息。

+0

感謝您的幫助!有用! –