Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图像设置为JFrame的背景_Java_Swing_Jframe - Fatal编程技术网

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