https://youtu.be/_6l6NmDvVsg
Как вы можете видеть в видео, если вы наберете contentPane.repaint (), а затем введите;, перерисовка автоматически изменится на getIgnoreRepaint (). Мне интересно, как решить эту проблему.
источник
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class RandomThread extends Thread{
Container contentPane;
boolean flag = false;
public RandomThread(Container contentPane) {
this.contentPane = contentPane;
}
void finish() {
flag = true;
}
public void run()
{
while(true)
{
int x = ((int)(Math.random()*contentPane.getWidth()));
int y = ((int)(Math.random()*contentPane.getHeight()));
JLabel label = new JLabel("Java");
label.setSize(80,30);
label.setLocation(x, y);
contentPane.add(label);
contentPane.getIgnoreRepaint(); // why this happen?
try {
Thread.sleep(300);
if(flag == true) {
contentPane.removeAll();
label = new JLabel("finish");
label.setSize(80, 30);
label.setLocation(100, 100);
label.setForeground(Color.red);
contentPane.add(label);
contentPane.getIgnoreRepaint(); //same problem
return;
}
}
catch(InterruptedException e) { return; }
}
}
}