1

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

}
4

1 に答える 1

2
  • ペイント メソッドにプログラム ロジックを含めないでください。
  • d のような int ではなく、浮動小数点数 double を使用してスケーリングを行います。
  • スケーリング数の値は、コード内に含まれるロジックではなく、システム時間に基づいてください。それが呼び出される速度、描画メソッドを制御することはできません。
于 2013-05-10T01:48:21.723 に答える