JComponent での描画で、この奇妙な種類の不具合が発生しています。JFrame ウィンドウをモニターの境界外にドラッグすると、描画が加速し、必要以上に速く描画されます。スイング管理で何かをしなければならないと思います.Jframeが画面外になると描画が停止し、モニター画面の境界内に設定された後、バーストのような方法で再開するようです.
これが私のコードです:
package javagame;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JComponent;
/**
*
*
*/
public class Screen extends JComponent implements Runnable{
// paintbrush for drawing.
//private Graphics internalg;
private boolean keepDrawing = true;
public Screen() {
super();
startDrawing();
}
/// Draw methods
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//internalg = g;
//Draw
//System.out.println("painted");
drawSomething(g);
}
@Override
public void run() {
//Draw until manually stopped
while(keepDrawing){
repaint();
try { Thread.sleep(100); }
catch (InterruptedException ex) { }
}
}
/**
* Fire off thread.
*/
private void startDrawing()
{
Thread t = new Thread(this);
//thread ends when JFrame is closed.
t.setDaemon(true);
t.start();
}
/// Draw Logic ///
/// Images
int d = 2;
public void drawSomething( Graphics internalg )
{
if (isValid()){
internalg.setColor(Color.BLACK);
internalg.fillRect(0, 0, getWidth(), getHeight());//clear bg
internalg.setFont( new Font(Font.DIALOG, Font.BOLD, 15) );
internalg.setColor( Color.GREEN );
internalg.drawOval( (getWidth()/2)-(d/2) , (getHeight()/2)-(d/25), d, d);
d++;
}
}
/// Images
}