2016-11-05 51 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

感谢您的帮助!有用! –