如何将图像导入JLabel?

时间:2016-11-05 21:36:42

标签: image jframe label

这是我的代码,应该显示图像和它下面的按钮

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上没有显示任何图片。图片在包中。

1 个答案:

答案 0 :(得分: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部分找到有关它的更多信息。