java – super. Problems with paintcomponent (g)
•
Java
This is a clip:
protected void paintComponent(final Graphics g) {
Runnable r=new Runnable() {
@Override
public void run() {
while(true) {
super.paintComponent(g); // <----- line of error
g.setColor(Color.red);
g.drawOval(x,y,width,height);
g.fillOval(x,height);
x++;
y++;
width++;
height++;
if(width==20)
break;
try {
Thread.sleep(100);
} catch(Exception exc) {
System.out.println(exc);
}
}
}
};
Thread moveIt=new Thread(r);
moveIt.start();
}
The following errors occur when compiling complete code:
d:\UnderTest>javac mainClass.java
mainClass.java:18: cannot find symbol
super.paintComponent(g);
^
symbol: method paintComponent(Graphics)
location: class Object
1 error
Why do I receive this error?
If this is my complete code:
import java.awt.*;
import javax.swing.*;
import java.lang.Thread;
class movingObjects extends JPanel {
int x=2,y=2,width=10,height=10;
@Override
protected void paintComponent(final Graphics g) {
Runnable r=new Runnable() {
@Override
public void run() {
while(true) {
super.paintComponent(g);
g.setColor(Color.red);
g.drawOval(x,height);
x++;
y++;
width++;
height++;
if(width==20)
break;
try {
Thread.sleep(100);
} catch(Exception exc) {
System.out.println(exc);
}
}
}
};
Thread moveIt=new Thread(r);
moveIt.start();
}
}
class mainClass {
mainClass() {
buildGUI();
}
public void buildGUI() {
JFrame fr=new JFrame("Moving Objects");
movingObjects mO=new movingObjects();
fr.add(mO);
fr.setVisible(true);
fr.setSize(400,400);
fr.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new mainClass();
}
}
Solution
You should use qualified super
movingObjects.super.paintComponent(g);
Because when you use this or super in an inner class (in this case: runnable), you will get the inner class If you want to use an external class of an internal class, use qualified this or qualified super
YourOuterClassName.this YourOuterClassName.super
Qualified super is a term I can't find in JLS. I invented it myself
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
