java:拉动窗口g改变大小后,窗口上的按钮不见了,鼠标经过后又显示,为何会这样?

我在学习给窗口设置背景图,且图片随着窗口大小的改变而改变,可是改变窗口大小后,其他按钮不见了。。。。在鼠标经过按钮时按钮又显示出来了。。。怎么办?怎么让按钮按钮不消失?
如图:

代码:
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class JImagePane extends JLabel
{
private static final long serialVersionUID = -8251916094895167058L;
private Image backgroundImage;
protected void paintComponent(Graphics g)
{
g.drawImage(backgroundImage, 0, 0,
this.getWidth(),this.getHeight(), this);
}
public static void main(String[] args)
{
JImagePane imagePane = new JImagePane();
imagePane.backgroundImage=(new ImageIcon("f:\\ai.jpg")).getImage();
//背景面板
JFrame frame = new JFrame("JImagePane Test");
Container con=frame.getLayeredPane();
con.setLayout(new BorderLayout());
con.add(imagePane);
//主面板
Container contenPane=frame.getContentPane();
JPanel jp=new JPanel();
JButton jbu=new JButton("换背景");
jp.add(jbu);
jp.setOpaque(false);
contenPane.add(jp);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);//居中显示
frame.setVisible(true);
}
}

package test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;

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

public class JImagePane extends JLabel {
    private static final long serialVersionUID = -8251916094895167058L;
    private Image backgroundImage;

    protected void paintComponent(Graphics g) {
        g.drawImage(backgroundImage, 0, 0, getWidth(), getHeight(),this);
super.paintComponent(g);// 这里需要完成组件原来的绘制
    }

    public static void main(String[] args) {
// 背景面板
JFrame frame = new JFrame("JImagePane Test");
// 主面板
Container contenPane = frame.getContentPane();
JPanel jp = new JPanel() {};
JButton jbu = new JButton("换背景");
jp.add(jbu);
jp.setOpaque(false);
JImagePane imagePane = new JImagePane();
imagePane.backgroundImage = (new ImageIcon("f:\\ai.jpg")).getImage();
imagePane.setLayout(new BorderLayout());// 设置图片组件的布局
imagePane.add(jp, BorderLayout.NORTH);// 在图片组件上增加新的控件
contenPane.add(imagePane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);// 居中显示
frame.setVisible(true);
    }
}

说明:

1、JImagePane类的paintComponent方法中需要完成原来的绘制。

2、由于需要在JImagePane上直接显示按钮,所有布局和添加按钮都是在JImagePane的实例上进行。

追问

大神啊,这样是可以了。可是这跟网上说的一般背景都是放在第二层(layeredpane)啊,按照你的方法是把背景也放在最上层了,一般我们所用的软件的背景都放在哪个层呢?又是用什么方法来设置背景图的?

温馨提示:答案为网友推荐,仅供参考
相似回答