java - Glitch drawing on JComponent -
i'm having weird kind of glitch drawing on jcomponent. happens whenever drag jframe window outside bounds of monitor, drawing accelerates , draws faster should. i'm guessing has swing management, seems drawing stops once jframe offscreen , resumes in burst kind of way after being set inside bounds of monitor screen.
here's code:
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 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 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 }
- don't have program logic in painting methods.
- use floating point numbers, double, scaling, not int, d.
- base value of scaling number on system time, not on logic contained within code have no control on how fast called, painting methods.
Comments
Post a Comment