Java 将图像设置为JFrame的背景
我正在制作一个小应用程序,但我想在整个窗口中设置一个图像作为背景。我试着让它像下面这样,但什么也没发生。图像在类所在的文件夹中,因此作为路径,我只输入名称…你能帮我吗?我能做什么Java 将图像设置为JFrame的背景,java,swing,jframe,Java,Swing,Jframe,我正在制作一个小应用程序,但我想在整个窗口中设置一个图像作为背景。我试着让它像下面这样,但什么也没发生。图像在类所在的文件夹中,因此作为路径,我只输入名称…你能帮我吗?我能做什么 Container c = getContentPane(); setContentPane(c); setContentPane(new JLabel(new ImageIcon("Chrysanthemum.jpg"))); 一种可能是向JFrame添加一个BorderLayout,它应该用JLabel
Container c = getContentPane();
setContentPane(c);
setContentPane(new JLabel(new ImageIcon("Chrysanthemum.jpg")));
一种可能是向JFrame添加一个
BorderLayout
,它应该用JLabel
填充JFrame
,然后设置背景,将JLabel
添加到框架,然后向其添加组件,如下所示:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Foo extends JFrame {
public Foo() {
setLayout(new BorderLayout());
JLabel background = new JLabel(new ImageIcon("Untitled.png"));
add(background);
background.setLayout(new FlowLayout());
background.add(new JButton("foo"));
setSize(500, 500);
setVisible(true);
}
public static void main(String[] args) {
Foo foo = new Foo();
}
}
上面的方法对我很有效,在500 x 500
JFrame
的顶部中间有一个JButton
按钮,该按钮具有指定的背景。我要做的是创建一个带有背景图像的JPanel
,并将其添加到JFrame
中。在我的一个项目中,我已经有了一个背景面板
类,这就是我的设置
public class MyFrame extends JFrame {
private BackgroundPanel bgPanel;
public MyFrame() {
bgPanel = new BackgroundPanel("Chrysanthemum.jpg");
setTitle("MyFrame");
setResizable(false);
setContentPane(bgPanel);
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new MyFrame();
}
}
// -- BackgroundPanel class
public class BackgroundPanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image bg;
public BackgroundPanel(String path) {
this(Images.load(path).getImage());
}
public BackgroundPanel(Image img) {
this.bg = img;
setPreferredSize(new Dimension(bg.getWidth(null), bg.getHeight(null)));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (bg != null) g.drawImage(bg, 0, 0, getWidth(), getHeight(), null);
}
}
当然ut不起作用,JLabel是标签而不是背景。如何将图像作为背景?应该会帮你的,Gadzooks!需要回答多少次?它不起作用…我不知道为什么我应该在哪里有图像?我把它和类放在同一个文件夹里…我只指定了名称…但它没有work@user3233650该方法(大部分)是正确的,它不起作用的可能原因是图像的位置不是您认为的位置…@user3233650 ImageIcon(String)期望找到与程序执行上下文相关的图像。尝试改用新的ImageIcon(getClass().getResource(“imagename”)),例如,
JFrame
的默认布局已经是BorderLayout
。另请参见。除非您想调整背景的大小,否则这是浪费精力。此外,以这种方式缩放图像没有考虑原始图像的比率,通常不会产生很好的结果-IMHO