我目前正在学习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
{
}
当运行这段代码时,它没有给予我任何错误,但它也没有显示图片。我看到一些问题和人有同样的问题,但他们的代码与我的完全不同,他们使用其他方式来显示图像。
5条答案
按热度按时间yfjy0ee71#
1.您不需要在
Game
JFrame
中使用另一个JFrame
示例:1.从构造函数调用
setVisible(flag)
并不可取,而是从外部初始化JFrame
,并将setVisible(true)
放在事件调度线程内部,以使用SwingUtilities.invokeLater(Runnable)
维护Swing的GUI呈现规则1.不要通过
JFrame
的setSize(Dimension)
给予大小提示。相反,使用正确的组件布局,在将所有相关组件添加到JFrame
后调用pack()
。1.尝试将
JScrollPane
与JLabel
配合使用,以获得比标签大小更大的图像的更好用户体验。所有上述描述都在下面的示例中进行:
pkwftd7m2#
在创建
Jlabel
后执行此操作还将布局设置为JFrame
kb5ga3dv3#
您将标签添加到了错误的
JFrame
。另外,请将setVisible()
移到末尾。k10s72fa4#
还可以尝试使用来自资源的图像,而不是来自PC的硬编码路径。您可以查看此处,其中有人问了关于Jframe中图像的类似问题:How to add an ImageIcon to a JFrame?
w8ntj3qf5#
接下来的问题是将
JLabel
添加到Game1
,但显示另一个帧(Display f
)。将add(imageLabel);
更改为Game1.f.add(imageLabel);
。建议:
1)根据您的问题:
Game1
扩展JFrame
看起来Display
也是一个帧,只使用一个帧来显示内容。2)使用
pack()
方法代替setSize(1000, 750);
3)在构造结束时调用
setVisible(true);
。4)使用
LayoutManager
来布局组件。