【问题标题】:Invisible objects because repaint method - Java Swing由于重绘方法不可见的对象 - Java Swing
【发布时间】:2012-05-29 16:53:05
【问题描述】:

问题来了,因为我覆盖了 jPanel 的 paintComponent 方法,所以当我重新绘制所有对象时,所有对象都被隐藏,直到我聚焦它们。 我需要覆盖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();
}

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

非常感谢,我需要在 6 天内完成应用程序,而我每分钟都快疯了


编辑:感谢CARDLAYOUT解决

【问题讨论】:

    标签: java swing netbeans repaint


    【解决方案1】:
    • 不要在运行时使用add / remove JPanels 或其内容,而是使用CardLayout

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

    • 如需更好的帮助,请尽快使用SSCCE 编辑您的问题,

    【讨论】:

    • 好吧,我终于用 CardLayout 解决了。非常感谢!!
    【解决方案2】:

    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 组件上处理绘画的正确方法。

    【讨论】:

    • 谢谢,但是在改变了这两个东西之后它仍然不起作用:(问题代码已编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多