我目前正在学习Java,目前我仍然坚持使用。
我一直在寻找一种方法来将图像添加到我的JFrame中。 我在互联网上找到了这个:
ImageIcon image = new ImageIcon("path & name & extension");
JLabel imageLabel = new JLabel(image);
在将其实现到我自己的代码之后,它看起来像这样(这只是相关部分):
class Game1 extends JFrame
{
public static Display f = new Display();
public Game1()
{
Game1.f.setSize(1000, 750);
Game1.f.setResizable(false);
Game1.f.setVisible(true);
Game1.f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Game1.f.setTitle("Online First Person Shooter");
ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png");
JLabel imageLabel = new JLabel(image);
add(imageLabel);
}
}
class Display extends JFrame
{
}
运行此代码时,它不会给我任何错误,但它也不显示图片。我看到一些问题和人们有同样的问题,但他们的代码与我的完全不同,他们用其他方式来显示图像。
答案 0 :(得分:7)
JFrame
Game
内使用其他JFrame
个实例:setVisible(flag)
。而是从外部初始化您的JFrame
,并将您的setVisible(true)
置于事件调度线程中,以使用SwingUtilities.invokeLater(Runnable)
setSize(Dimension)
的{{1}}给出尺寸提示。而是在组件中使用适当的布局,在将所有相关组件添加到JFrame
后调用pack()
。JFrame
与JScrollPane
一起使用,以获得更好的用户体验,图片大小超过标签尺寸。以下所有描述均在以下示例中进行:
JLabel
答案 1 :(得分:2)
创建Jlabel
imageLabel.setBounds(10, 10, 400, 400);
imageLabel.setVisible(true);
还将布局设置为JFrame
Game.f.setLayout(new FlowLayout);
答案 2 :(得分:0)
您正在将标签添加到错误的JFrame
。另外,将setVisible()
移到最后。
import javax.swing.*;
class Game1 extends JFrame
{
public static Display f = new Display();
public Game1()
{
// ....
Game1.f.add(imageLabel);
Game1.f.setVisible(true);
}
}
答案 3 :(得分:0)
还尝试使用来自资源的图像,而不是来自PC的硬编码路径 您可以在这里查看,sombody在Jframe中询问有关图像的类似问题: How to add an ImageIcon to a JFrame?
答案 4 :(得分:0)
您的问题在下一次将JLabel
添加到Game1
但显示另一个框架(Display f
)。将add(imageLabel);
更改为Game1.f.add(imageLabel);
。
建议:
1)根据您的问题:Game1
扩展JFrame
似乎Display
也是一个框架,只使用一个框架来显示内容。
2)使用pack()
方法代替setSize(1000, 750);
3)在施工结束时致电setVisible(true);
。
4)使用LayoutManager
布局组件。