在JFrame中显示图像

use*_*879 4 java swing image jframe

我目前正在学习Java,目前我仍然坚持使用.

我一直在寻找一种方法来将图像添加到我的JFrame中.我在网上发现了这个:

ImageIcon image = new ImageIcon("path & name & extension");
JLabel imageLabel = new JLabel(image); 
Run Code Online (Sandbox Code Playgroud)

在将其实现到我自己的代码之后,它看起来像这样(这只是相关部分):

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
{
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时,它不会给我任何错误,但它也不显示图片.我看到了一些问题和人们有同样的问题,但他们的代码与我的完全不同,他们使用其他方式来显示图像.

Sag*_*age 7

  1. 您不需要在以下内容中使用另一个JFrame实例Game JFrame:
  2. setVisible(flag)从构造函数调用不是更可取的.而是JFrame从外部初始化你的setVisible(true)内部事件调度线程来维护Swing的GUI渲染规则SwingUtilities.invokeLater(Runnable)
  3. 不要给尺寸暗示setSize(Dimension)JFrame.而是在组件中使用适当的布局,pack()在将所有相关组件添加到组件后调用JFrame.
  4. 尝试使用JScrollPaneJLabel获得更好的用户体验,图像大于标签的大小即可.

所有上述描述均在以下示例中进行:

     class Game1 extends JFrame
    {
       public Game1()
      {
         // setSize(1000, 750);  <---- do not do it
         // setResizable(false); <----- do not do it either, unless any good reason

         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setTitle("Online First Person Shooter");

         ImageIcon image = new ImageIcon("C:\\Users\\Meneer\\Pictures\\image.png");
         JLabel label = new JLabel(image);
         JScrollPane scrollPane = new JScrollPane(label);
         scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
         scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
         add(scrollPane, BorderLayout.CENTER);
         pack();
      }

     public static void main(String[] args)
     {
        SwingUtilities.invokeLater(new Runnable() {

           @Override
           public void run() {
              new Game1().setVisible(true);
           }
        });

      }
    }
Run Code Online (Sandbox Code Playgroud)


AJ.*_*AJ. 5

创建后执行此操作Jlabel

imageLabel.setBounds(10, 10, 400, 400);
imageLabel.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

还将布局设置为 JFrame

Game.f.setLayout(new FlowLayout);
Run Code Online (Sandbox Code Playgroud)