将图像文件设置为背景

时间:2014-02-07 08:24:44

标签: java swing

我有一个扩展JFrame的类,它包含3个面板+另一个在布局中将所有3个面板保持在一起的面板。

panel = new JPanel();
    panel.setLayout(new BorderLayout());
    panel.add("North", panel2); //row of buttons
    panel.add("Center",grid); // grid of buttons
    panel.add("South",panel3); // a textfield that stretches across the total width of the frame
    add(panel);



    JLabel background = new JLabel (new ImageIcon ("C:\\.png"));
    background.setBounds (0,0,500,550);
    add(background);
    //the background for the frame


    setVisible (true);
    setResizable (false);
    setBounds (398,70, 570, 620);
    setDefaultCloseOperation (EXIT_ON_CLOSE);

我的问题是该程序为我提供了一个输出,其中jlabel中的背景图像/图像仅可见或以某种方式遮盖了面板/使按钮不可见。我需要背景图像在按钮后面,我的意思是这就是为什么它被称为背景我错过了什么?

  • 我没有使用容器,因为这不会很快被设置为applet并且如果这个原因足够,那就是白痴

1 个答案:

答案 0 :(得分:1)

可能最简单的方法是简单地将JLabel设为框架的内容窗格...

JLabel background =  new JLabel (new ImageIcon ("C:\\.png"));
setContentPane(background);

由此产生的下一个事实是JLabel默认情况下没有布局管理器,这使得向其添加其他内容有点困难(或者至少,不会导致您希望提供的内容)因此,接下来,您需要设置布局管理器...

setLayout(new BorderLayout()); // Forwarded to the content pane...

然后,您可以愉快地添加所有内容......

add(panel2, BorderLayout.NORTH); //row of buttons
add(grid); // grid of buttons
add(panel3, BorderLayout.SOUTH); // a textfield that

您可能遇到的下一个问题是大多数组件都是不透明的,因此如果您希望查看背景信息,则可能需要在要添加的组件上调用setOpaque(false) ... < / p>

最后......

setVisible (true);
setResizable (false);

这会导致一些问题,请尝试使用...

setResizable(false);
pack();
setVisible(true);

ps- JLabel不会自动调整图片大小,但打包应该会有所帮助...假设其余内容符合背景图片的大小......