1
У меня такой странный вид сбоя с рисунком на JComponent. Случается, что всякий раз, когда я перетаскиваю окно JFrame за пределы моего монитора, рисунок ускоряется и рисуется быстрее, чем нужно. Я предполагаю, что он должен что-то сделать с управлением swing, кажется, что рисование останавливается, когда Jframe выключен и возобновляется в виде пакета, после того, как он установлен в пределах экрана монитора.Рисунок сложения на JComponent
Вот мой код:
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
}
Я лично избегал использования 'Thread' для выполнения анимации (если у вас нет особенно сложной модели, которая может потребовать переменное количество времени для обновления) и полагаться на 'javax.swing.Timer' вместо – MadProgrammer
То же на @ MadProgrammer совета. Кроме того, в коде чертежа не должно быть никакой логики программы, даже что-то вроде безобидного, как 'd ++'. У вас нет полного контроля над тем, когда или когда будет проведен рисунок. –
Я не вижу вашей конкретной проблемы в Java 7/Windows 7. Возможно, вы можете получить лучшее обновление при некоторых обстоятельствах, поскольку требуемая область для обновления меньше, но я не вижу ее ... – MadProgrammer