Java 调用内部类的repaint不会触发paint(),实际上什么都不做
我对JApplet不太熟悉 和油漆并重新油漆()。感谢您的帮助 我有一个外部类“A”,它扩展了JApplet并在它的绘画中绘制了一些东西() 我还有一个私有类“B”,它位于a中,并且扩展了JApplet和draws 把东西塞进油漆里()。 A的paint()调用B的paint(),因此当运行A时,A和B都会被绘制 我使用鼠标侦听器来检测鼠标何时被点击,即何时被点击 B应该重新绘制()并绘制一些新内容,然后删除旧内容 但是,当我按下鼠标时,我看到B的repaint()什么也不做。 我在控制台上打印了几条调试消息,我就知道了 当调用B的repaint()时,什么也不会发生,也就是说,程序应该通过 B又是油漆了,但它没有 这是总体结构,再次感谢您的帮助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()什么也不做。 我在控制台上打印
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()
,因为那是你想要重新绘制的类。Removeprivate 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如何显示JAppletB
?我想我应该澄清一下,为了显示JApplet,A的喷漆()只调用了一次,但仅此而已。之后,B应该是一个继续自己重新绘制的程序。@seanstag问题是您正在显示小程序A
,而不是B
。可能您正在寻找的是一个普通的JPanel添加到JAppletA
的布局管理器中。请使用MCVE编辑您的问题。您好,谢谢非常喜欢,但这不是我要求的。我是说B的重新绘制应该触发B的绘制,但事实并非如此。我根本不想重新绘制A。@seanstag如何显示JAppletB
?我想我应该澄清一下,为了显示JApplet,A的绘制()被调用一次,但仅此而已。之后,B应该是一个继续自己重新绘制的程序。@seanstag问题是,您显示的是小程序A
,而不是B
。可能您要找的是一个普通的JPanel添加到您的JAppletA
的布局管理器中。请使用MCVE编辑您的问题。