【问题标题】:Set background in a JFrame在 JFrame 中设置背景
【发布时间】:2021-09-12 00:43:59
【问题描述】:

我想在 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;
 
  
  

}

【问题讨论】:

    标签: java swing background jframe


    【解决方案1】:

    几点:

    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());之类的代码

    3.不建议使用null布局管理器。查看Laying Out Components Within a Container教程。

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

    【讨论】:

    • 在 Swing 中你应该使用revalidate(),而不是 validate()。然而,这两种方法都不需要。在将所有组件添加到框架后,框架应该可见。
    猜你喜欢
    • 2010-11-07
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多