在 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;
}
几点:
- 代码应检查图像是否真的正在加载 -
ImageIcon
如果未找到文件,则不会抛出任何异常。测试高度或宽度是否为-1
,例如:
if (img.getIconHeigth() == -1) {
throw new FileNotFoundException("image: Bilder/Testbild");
}
或更好的 IMO,使用 ImageIO.read()
。
- 整个 GUI 代码应该 运行 在 EDT(事件调度线程)中,参见 Swing's Threading Policy. 。无法查看是否是,如果不是,请使用
SwingUtilities.invokeLater(() -> new Gui());
之类的代码
3.不推荐使用null
布局manager.CheckLaying Out Components Within a Container教程
注意:我测试了发布的代码 - 如果在 EDT 上调用 new Gui()
并且在文件夹 Bilder
中有图像 Testbild
,它可以正常工作。但是对于背景图像,我更愿意覆盖 JPanel
的 paintComponent
方法来绘制图像。
我想在 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;
}
几点:
- 代码应检查图像是否真的正在加载 -
ImageIcon
如果未找到文件,则不会抛出任何异常。测试高度或宽度是否为-1
,例如:
if (img.getIconHeigth() == -1) {
throw new FileNotFoundException("image: Bilder/Testbild");
}
或更好的 IMO,使用 ImageIO.read()
。
- 整个 GUI 代码应该 运行 在 EDT(事件调度线程)中,参见 Swing's Threading Policy. 。无法查看是否是,如果不是,请使用
SwingUtilities.invokeLater(() -> new Gui());
之类的代码
3.不推荐使用null
布局manager.CheckLaying Out Components Within a Container教程
注意:我测试了发布的代码 - 如果在 EDT 上调用 new Gui()
并且在文件夹 Bilder
中有图像 Testbild
,它可以正常工作。但是对于背景图像,我更愿意覆盖 JPanel
的 paintComponent
方法来绘制图像。