这是我的代码,应该显示图像和它下面的按钮
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"));
到目前为止我已经完成了这项工作,但JFrame上没有显示任何图片。图片在包中。
答案 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部分找到有关它的更多信息。