在JFrame中显示图像

时间:2013-11-20 14:08:38

标签: java image swing jframe

我目前正在学习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 个答案:

答案 0 :(得分:7)

  1. 您无需在JFrame Game内使用其他JFrame个实例:
  2. 不建议从构造函数中调用setVisible(flag)。而是从外部初始化您的JFrame,并将您的setVisible(true)置于事件调度线程中,以使用SwingUtilities.invokeLater(Runnable)
  3. 维护Swing的GUI呈现规则
  4. 请勿setSize(Dimension)的{​​{1}}给出尺寸提示。而是在组件中使用适当的布局,在将所有相关组件添加到JFrame后调用pack()
  5. 尝试将JFrameJScrollPane一起使用,以获得更好的用户体验,图片大小超过标签尺寸。
  6. 以下所有描述均在以下示例中进行:

    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布局组件。