在 JFrame 中设置背景

Set background in a JFrame

我想在 JFrame 中放置一个背景,所以我在 YouTube 上搜索并找到了一个视频,但它不起作用我尝试了另一个,但它也不起作用所以我的代码有什么问题 因为一直以来我开始它只是不存在但是 eclipse 没有标记任何错误。

package Pack;




import javax.swing.*;

public class Gui {

    public Gui(){
        JLabel background;
          Var.jf = new JFrame(); 
           Var.jf.setSize(Var.screenwidth, Var.screenheight);
           Var.jf.setTitle("test");
           Var.jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           Var.jf.setResizable(false);
           Var.jf.setVisible(true);
           Var.jf.setLocationRelativeTo(null);
           Var.jf.setLayout(null);
          ImageIcon img = new ImageIcon("Bilder/Testbild");
         
          background =  new JLabel("",img,JLabel.CENTER);
          background.setBounds(0,0,1000,1000);
         
          Var.jf.add(background);
           
           Var.Buttonxstart = new JButton("Start");
           Var.Buttonxstart.setBounds(300,220,400,120);
           Var.jf.add(Var.Buttonxstart);
         
           Var.Buttonxclose = new JButton("Exit");
           Var.Buttonxclose.setBounds(300,440,400,120);
           Var.jf.add(Var.Buttonxclose);
          
           
           
           
        
    }
    
    
}

.

package Pack;

import javax.swing.JButton;
import javax.swing.JFrame;

  public class Var {
  static JFrame jf;
  static int screenheight = 1000;
  static int screenwidth = 1000;
  static JButton Buttonxstart;
  static JButton Buttonxclose;
 
  
  

}

几点:

  1. 代码应检查图像是否真的正在加载 - ImageIcon 如果未找到文件,则不会抛出任何异常。测试高度或宽度是否为-1,例如:
if (img.getIconHeigth() == -1) {
    throw new FileNotFoundException("image: Bilder/Testbild");
}

或更好的 IMO,使用 ImageIO.read()

  1. 整个 GUI 代码应该 运行 在 EDT(事件调度线程)中,参见 Swing's Threading Policy. 。无法查看是否是,如果不是,请使用 SwingUtilities.invokeLater(() -> new Gui());
  2. 之类的代码

3.不推荐使用null布局manager.CheckLaying Out Components Within a Container教程

注意:我测试了发布的代码 - 如果在 EDT 上调用 new Gui() 并且在文件夹 Bilder 中有图像 Testbild,它可以正常工作。但是对于背景图像,我更愿意覆盖 JPanelpaintComponent 方法来绘制图像。