不可见对象因为重绘方法--Java Swing

时间:2012-05-29 16:53:06

标签: java swing netbeans repaint

问题来了,因为我覆盖了jPanel的paintComponent方法,因此当我重新绘制时,所有的objets都被隐藏,直到我将它们聚焦。 我需要覆盖paintComponent方法,因为它是我在互联网上找到的唯一一个改变jFrame背景图像的答案。

首先我创建一个jPanel类:

    public class JPanelFondoPrincipal extends javax.swing.JPanel {

    public JPanelFondoPrincipal(){    
        this.setSize(800,500);
    }

    @Override
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Dimension tamanio = getSize();
        ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/images/fondo_principal.png"));        
        g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);        
        setOpaque(false);
    }
}

在我的jPanelForm中:

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    // TODO add your handling code here:
    JPanelFondo p = new JPanelFondo();
    this.add(p);
    validate();
    p.repaint();
}

我已经尝试将所有我的Objets(标签,textFields ......)添加到一个新面板中,以便我可以在重绘后添加它,并手动设置所有对象可见但是一切仍然是不可见的。

非常感谢,我需要在6天内完成应用程序,我会在一分钟内变得疯狂


编辑:感谢CARDLAYOUT

2 个答案:

答案 0 :(得分:3)

Swing程序应覆盖paintComponent()而不是覆盖paint()。

http://java.sun.com/products/jfc/tsc/articles/painting/

你应该首先在覆盖paintComponent();

中调用super.paintComponent(g);
   public void paintComponent(Graphics g){
        super.paintComponent(g);
        Dimension tamanio = getSize();
        ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/images/fondo_principal.png"));        
        g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);        
        setOpaque(false);
    }

Here's处理绘制到JPanel组件上的正确方法。

答案 1 :(得分:3)

  • 请勿add / remove JPanels或其内容在运行时使用CardLayout代替

  • 您的JPanelFondo p = new JPanelFondo();public class JPanelFondoPrincipal extends javax.swing.JPanel {不相符

  • 通过SSCCE

  • 更快地帮助您修改问题