如何在不从屏幕上删除组件的情况下添加背景图像?JAVA
我希望在不删除当前添加到屏幕上的组件的情况下,将图像作为JFrame的背景 我能够在屏幕上获取和显示图像,但一旦我这样做,我添加的按钮就会从屏幕上消失 我当前的代码将图像放到屏幕上,但删除了按钮。 执行此操作的行用注释标记 如有任何帮助/建议,将不胜感激! -提前谢谢如何在不从屏幕上删除组件的情况下添加背景图像?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
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
子类的新实例中
这已经在堆栈溢出的其他几个地方进行了描述:
我知道我不应该对此发表评论,但我已经花了无数个小时试图解决这个问题,但多亏了你,我才能够立即解决它!再次感谢你的帮助!!