背景图像JFrame与内容

时间:2012-03-22 03:31:56

标签: java swing jframe background-image border-layout

我有JFrame BorderLayout,所有方面都有面板(北,东,......)。在面板中主要有标签和按钮。

现在我希望框架有背景图像,一些研究告诉我,我必须更改框架的内容窗格。

但是当我尝试这个时,内容会被放到后台并且不可见。此外,如果调整帧大小,我也不知道如何调整图像大小。

对此有一个简单的解决方法,还是我必须重做大部分代码?

3 个答案:

答案 0 :(得分:4)

  1. JPanel(或JComponent)的背景图片添加到BorderLayout.CENTER,然后此JPanel填充整个JFrame区域,其他人JComponents已加入此JPanel

  2. there are Jpanels on all sides (North, East ,...). In the Jpanels there are Jlabels and Jbuttons mostly.

    这些JComponents涵盖Rectangle的所有可用JFrame,然后Background Image(从我的第一点开始)永远不会被删除,因为这些JComponents是on_top JFrame也可以隐藏此Image

  3. 添加JPanel with Background Image(从我的第一点开始),然后使用JPanel(s)添加另一个JPanel#setOpaque(false);,然后此JPanel将是透明的,请注意{{1默认情况下已实施JPanel

答案 1 :(得分:1)

frame.getContentPane().add(new JPanel() {

      public void paintComponent(Graphics g) {
            g.drawImage(img, 0, 0, this.getWidth(), this.getHeight());
      }
});

答案 2 :(得分:0)

此示例将帮助您入门。像任何JPanel一样使用它。

public class JPanelWithBackground extends JPanel {
Image imageOrg = null;
Image image = null;
{
    addComponentListener(new ComponentAdapter() {
        public void componentResized(ComponentEvent e) {
            int w = JPanelWithBackground.this.getWidth();
            int h = JPanelWithBackground.this.getHeight();
            image = w>0&&h>0?imageOrg.getScaledInstance(w,h, 
                    java.awt.Image.SCALE_SMOOTH):imageOrg;
            JPanelWithBackground.this.repaint();
        }
    });
}
public JPanelWithBackground(Image i) {
    imageOrg=i;
    image=i;
    setOpaque(false);
}
public void paint(Graphics g) {
    if (image!=null) g.drawImage(image, 0, 0, null);
    super.paint(g);
}
}

用法示例:

    Image image = your image
    JFrame f = new JFrame("");
    JPanel j = new JPanelWithBackground(image);
    j.setLayout(new FlowLayout());
    j.add(new JButton("YoYo"));
    j.add(new JButton("MaMa"));
    f.add(j);
    f.setVisible(true);