Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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_Java_Jframe_Jpanel_Jbutton - Fatal编程技术网

如何在不从屏幕上删除组件的情况下添加背景图像?JAVA

如何在不从屏幕上删除组件的情况下添加背景图像?JAVA,java,jframe,jpanel,jbutton,Java,Jframe,Jpanel,Jbutton,我希望在不删除当前添加到屏幕上的组件的情况下,将图像作为JFrame的背景 我能够在屏幕上获取和显示图像,但一旦我这样做,我添加的按钮就会从屏幕上消失 我当前的代码将图像放到屏幕上,但删除了按钮。 执行此操作的行用注释标记 如有任何帮助/建议,将不胜感激! -提前谢谢 package game; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import j

我希望在不删除当前添加到屏幕上的组件的情况下,将图像作为JFrame的背景

我能够在屏幕上获取和显示图像,但一旦我这样做,我添加的按钮就会从屏幕上消失

我当前的代码将图像放到屏幕上,但删除了按钮。 执行此操作的行用注释标记

如有任何帮助/建议,将不胜感激! -提前谢谢

package game;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class MainMenu extends JFrame{

    public MainMenu() {
        super("TEST");
    }

    public static void createGUI()
    {
        MainMenu frame = new MainMenu();
        frame.setSize(300,400);
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /**
         *  This is the line that is giving me issues
        **/
        frame.setContentPane(new JLabel(new ImageIcon("C:\\Users\\Austin\\Pictures\\Landscape.jpg")));

        panel(frame);

        frame.setVisible(true);
    }

    public static void panel(MainMenu frame)
    {
        JPanel panel = new JPanel(new GridBagLayout());

        frame.add(panel);
        GridBagConstraints c = new GridBagConstraints();


        c.gridx = 0;
        c.gridy = 0;
        c.insets = new Insets(4,4,4,4);
        panel.add(Buttons.singlePlayerButton(), c);

        c.gridx = 0;
        c.gridy = 1;
        panel.add(Buttons.twoPlayerButton(), c);

        c.gridx = 0;
        c.gridy = 2;
        panel.add(Buttons.exitButton(), c);


    }

    public static void runGUI()
    {
        javax.swing.SwingUtilities.invokeLater(new Runnable()
                {
                    public void run()
                    {
                        createGUI();
                    }
                });
    }

}
在面板方法中添加退出按钮后,尝试将“frame.add(panel);”更改为该位置。我不知道这是否有效,但在添加按钮之前先添加面板。对我来说似乎有点奇怪,但也许它是正确的

问候亲信

*编辑 我认为在将面板添加到框架后也可以添加按钮,但我不确定添加()是否是JFrame.getContentPane().add()的快捷方式。这意味着通过调用
frame.add(panel)
您正在设置
JFrame
的内容窗格一次,然后调用
frame.setContentPane(新的JLabel(…)
您正在扔掉旧的内容窗格,并将其替换为新的
JLabel

一个更好的方法是创建一个新类,它是
JPanel
的子类,然后重写它的
paintComponent()
方法,这样它将直接在面板的背景上绘制图像。将所有按钮等添加到自定义
JPanel
子类的新实例中

这已经在堆栈溢出的其他几个地方进行了描述:


我知道我不应该对此发表评论,但我已经花了无数个小时试图解决这个问题,但多亏了你,我才能够立即解决它!再次感谢你的帮助!!