Java 调用内部类的repaint不会触发paint(),实际上什么都不做

Java 调用内部类的repaint不会触发paint(),实际上什么都不做,java,swing,repaint,japplet,Java,Swing,Repaint,Japplet,我对JApplet不太熟悉 和油漆并重新油漆()。感谢您的帮助 我有一个外部类“A”,它扩展了JApplet并在它的绘画中绘制了一些东西() 我还有一个私有类“B”,它位于a中,并且扩展了JApplet和draws 把东西塞进油漆里()。 A的paint()调用B的paint(),因此当运行A时,A和B都会被绘制 我使用鼠标侦听器来检测鼠标何时被点击,即何时被点击 B应该重新绘制()并绘制一些新内容,然后删除旧内容 但是,当我按下鼠标时,我看到B的repaint()什么也不做。 我在控制台上打印

我对JApplet不太熟悉 和油漆并重新油漆()。感谢您的帮助

我有一个外部类“A”,它扩展了JApplet并在它的绘画中绘制了一些东西() 我还有一个私有类“B”,它位于a中,并且扩展了JApplet和draws 把东西塞进油漆里()。 A的paint()调用B的paint(),因此当运行A时,A和B都会被绘制

我使用鼠标侦听器来检测鼠标何时被点击,即何时被点击 B应该重新绘制()并绘制一些新内容,然后删除旧内容

但是,当我按下鼠标时,我看到B的repaint()什么也不做。 我在控制台上打印了几条调试消息,我就知道了 当调用B的repaint()时,什么也不会发生,也就是说,程序应该通过 B又是油漆了,但它没有

这是总体结构,再次感谢您的帮助

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    public class A extends JApplet {

        private class B extends JApplet implements  MouseListener{

            public B() { }
            public void paint (Graphics g) {
                // g.drawline ...
                //System.out...
            }

            public void mousePressed(MouseEvent e) {
                //System.out....
                repaint();
            }
            public void mouseReleased(MouseEvent e) {
                //System.out....
                repaint();

            }
            // ... rest of mouse listener interface

        }

        public void init() {
            // setSize() ...
        }


        public  void paint(Graphics g) {
            // g.drawRectange ...
            // Draw other stuff

            B b = new B();
            B.paint(g)
        }
    }

问题是,
B
类中的
repaint()
请求没有响应。这可能会触发
B
类的重新绘制,但没有人告诉他,这并不意味着
a
类被重新绘制。就像你说的:

A的paint()调用B的paint(),因此当运行A时,A和B都会被绘制

没错,但这并不意味着反过来也是一样的


当你想让
A
类重新绘制它的内容时,你必须在
A
对象上调用
repaint()
,因为那是你想要重新绘制的类。

问题是
B
类中没有任何东西对
repaint()
请求做出反应。这可能会触发
B
类的重新绘制,但没有人告诉他,这并不意味着
a
类被重新绘制。就像你说的:

A的paint()调用B的paint(),因此当运行A时,A和B都会被绘制

没错,但这并不意味着反过来也是一样的


当你想让
A
类重新绘制它的内容时,你必须在
A
对象上调用
repaint()
,因为那是你想要重新绘制的类。

Remove
private class B extensed JApplet实现MouseListener{public B(){}
(但是将
实现MouseListener
添加到外部小程序中)&它应该按预期工作(AFAIU)。这就引出了一个问题..为什么要尝试这样做?请编辑您的问题,使其包含一个可由其他人编译和测试的文件,该文件显示您的调试
系统.out.println()
调用已打印,但内容不会重新加载。还包括显示/加载小程序的代码。@Progman“include a MCVE”好主意,以及提示:
[MCVE]
在注释中自动展开。@AndrewThompson不知道,谢谢;)删除
私有类B扩展JApplet实现MouseListener{public B(){}
(但是将
实现MouseListener
添加到外部小程序中)&它应该按预期工作(AFAIU)。这就引出了一个问题..为什么要尝试这样做?请编辑您的问题,使其包含一个可由其他人编译和测试的文件,该文件显示您的调试
系统.out.println()
会打印调用,但不会重新加载内容。还包括显示/加载小程序的代码。@Progman“包含MCVE”好主意,以及提示:
[MCVE]
在注释中自动展开。@AndrewThompson不知道,谢谢;)您好,非常感谢,但这不是我要求的。我是说B的重新喷漆应该触发B的喷漆,但事实并非如此。我根本不想重新喷漆A。@seanstag如何显示JApplet
B
?我想我应该澄清一下,为了显示JApplet,A的喷漆()只调用了一次,但仅此而已。之后,B应该是一个继续自己重新绘制的程序。@seanstag问题是您正在显示小程序
A
,而不是
B
。可能您正在寻找的是一个普通的JPanel添加到JApplet
A
的布局管理器中。请使用MCVE编辑您的问题。您好,谢谢非常喜欢,但这不是我要求的。我是说B的重新绘制应该触发B的绘制,但事实并非如此。我根本不想重新绘制A。@seanstag如何显示JApplet
B
?我想我应该澄清一下,为了显示JApplet,A的绘制()被调用一次,但仅此而已。之后,B应该是一个继续自己重新绘制的程序。@seanstag问题是,您显示的是小程序
A
,而不是
B
。可能您要找的是一个普通的JPanel添加到您的JApplet
A
的布局管理器中。请使用MCVE编辑您的问题。