如何将我的组件放在我绘制的JFrame之上?

时间:2013-09-14 19:34:29

标签: java image swing jframe

我已经开始设置我的JFrame的背景图像,但现在我的组件(我假设)卡在它后面。我曾尝试阅读有关顶级容器的信息,但我无法理解T_T。有人有主意吗 ?也许我需要找到另一种设置背景图像的方法?感谢您的任何帮助。 :

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

//Running the GUI
    public static void main(String[] args) throws IOException {
        CopyOfMainMenu gui2 = new CopyOfMainMenu();
        gui2.mainPanel();
    }

    public void thepanel () throws IOException {
        // GridBagLayout/Constraint
        GridBagConstraints gridbagc = new GridBagConstraints();
        gbc.insets = new Insets(15, 15, 15, 15);
        JFrame frame = new JFrame();
        JPanel panel = new JPanel(new GridBagLayout());
        // Creating JButtons/Icons
        panel.add(buttonTwo, gbc); //SCOREBOARD
        panel.add(buttonThree, gbc); //INSTRUCTIONS
        // JButton size's
        button.setPreferredSize(new Dimension(400, 35))
        buttonTwo.setContentAreaFilled(false);
        buttonThree.setBorder(BorderFactory.createEmptyBorder());
        buttonThree.setContentAreaFilled(false);
    }
}

再次感谢您的任何帮助。

2 个答案:

答案 0 :(得分:3)

您永远不会在任何地方添加面板(如果您这样做,它会在图像上绘制)。但是,可以使用JLabel作为容器:

JComponent panel = new JLabel(new ImageIcon(ImageIO.read(new File("res/FinalBG.png"))));
panel.setLayout(new GridBagLayout());
...
// continue adding the components as before
...
frame.add(panel);

(或将标签设置为内容窗格,也可以正常工作)。

答案 1 :(得分:1)

在JFrame中,覆盖paint方法并使用Graphics对象绘制图像:

public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2d = (Graphics2D) g;
    g2d.drawImage(image, width, height, null);
}