我有一个主Panel,内部有一个背景Panel:bgPanel
bgPanel内部增加了两个子panel,可是界面显示后,增加的两个子Panel并不显示,只有当鼠标移动过某个组件的位置,比如一个JButton的位置时,该JButton才显示,我缩放窗口,repaint,revalidate都试过了,没用。注:背景Panel内部重载了paint方法,这个方法绘制了一个全屏的背景图,新增加的其他panel都在背景图中间区域,不知道是不是这个原因。请问解决办法?多谢了!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tainy_zhang】截止到2008-06-27 10:09:35的历史汇总数据(不包括此帖):
    发帖数:6                  发帖分:450                
    结贴数:5                  结贴分:400                
    未结数:1                  未结分:50                 
    结贴率:83.33 %            结分率:88.89 %            
    楼主加油
      

  2.   

    Panel 重写 public void paintComponent(Graphics g)去绘制背景图片吧!
    再Panel.updateUI();
    Panel.revalidate();
      

  3.   

    两个panel的载体都是同一个Panel,这样实现不行吗?import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;public class SubPanel extends JFrame {    private JPanel backPanel = new JPanel();    private JPanel forePanel = new JPanel();    public SubPanel() {
            Container contentPane = this.getContentPane();
            contentPane.add(backPanel);
            backPanel.setSize(300, 300);
            backPanel.setBackground(Color.BLUE);
            forePanel.setPreferredSize(new Dimension(50, 50));
            forePanel.setSize(new Dimension(50, 50));
            JButton button = new JButton("JButton");
            button.setBackground(Color.RED);
            button.setForeground(Color.YELLOW);
            forePanel.add(button);
            contentPane.add(forePanel);
            forePanel.setOpaque(false);
            contentPane.setComponentZOrder(forePanel, 0);
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            SubPanel sp = new SubPanel();
            sp.setVisible(true);
            sp.setSize(300, 300);
            sp.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }}
      

  4.   

    2楼是说背景Panel的方法吗?重写了,在里面重新绘制了背景,结果一样。
      

  5.   

    请把重载了paint方法帖出来在重载paint方法中,是不是漏掉了一些东东
    重载的paint中记得加上super.paint(g)这一句
    这类问题,不帖代码,只能凭感觉说话,是帮不了多少忙的
      

  6.   

    背景Panel的paint方法如下:
    ××××××××××××××××××××××××××××××
    public void paint(Graphics g)
    {
    super.paint(g);
    if(img != null)
    g.drawImage(img,0,0,this);
    }
    ××××××××××××××××××××××××××××××
    这个img倒是绘制正常了,可是背景panel上面增加的其他Panel无法正常显示,鼠标移过才会显示出来
      

  7.   

    呵呵,解决了,供大家参考:
    在paint方法中调用了paintComponents方法即可
    感觉很别扭,有其他方法吗?
      

  8.   

    public void paint(Graphics g) 

    super.paint(g); 
    if(img != null) 
    g.drawImage(img,0,0,this); 
    super.repaint();
      

  9.   

    2楼的朋友说的是paintComponent,这个是绘制自身的,解决不了这个问题,不过给我很大启发,哈哈,多谢!
    以前没有注意过这绘制内部组件的方法.