Y
yyannekk
Gast
moin,
ich hab ma ne Frage zur Ausführung von repaint eines JComponent Objekts. Ich hab ein JFrame in dem das contentPane zu dem JComponente (JPanel) gesetzt ist. Das frame hat einen KeyListener.
in etwa so:
Wenn des KeyListeners Methoden aufgerufen werden, und in diese das JPanel neu zeichnen, dann wird es erst nach dem Durchlaufen der KeyListener Methode ausgeführt.
Warum ist das so? Wenn ich das repainten in einen eigenen Thread auslagere wird es "parallel" ausgeführt. Denke mal es hat also mit dem GUI Thread oder so zu tun, aber warum kann der sich nicht zwischendurch neuzeichnen. Wär nett wenn mir da jemand Hintergrund infos geben könnte, oder wo man das nachlesen kann.
Ich habe nämlich das Problem, dass ich sozusagen einen Ladebalken anzeigen will. Wäre es zB eine gute Lösung es folgendermaßen zu machen:
ich hab ma ne Frage zur Ausführung von repaint eines JComponent Objekts. Ich hab ein JFrame in dem das contentPane zu dem JComponente (JPanel) gesetzt ist. Das frame hat einen KeyListener.
in etwa so:
Java:
public class TestRepaint implements KeyListener
{
private class CanvasPane extends JPanel{ public void paint( Graphics g ) { g.drawImage(image,0,0,null);}
public TestRepaint(){
frame.addKeyListener(this);
canvas=new CanvasPane();
frame.setContentPane(canvas);
}
public void keyPressed(KeyEvent arg){ canvas.repaint(); // das fenster zeigt neuen Inhalt erst //nachdem keyPressed durch ist an
}
}
Wenn des KeyListeners Methoden aufgerufen werden, und in diese das JPanel neu zeichnen, dann wird es erst nach dem Durchlaufen der KeyListener Methode ausgeführt.
Warum ist das so? Wenn ich das repainten in einen eigenen Thread auslagere wird es "parallel" ausgeführt. Denke mal es hat also mit dem GUI Thread oder so zu tun, aber warum kann der sich nicht zwischendurch neuzeichnen. Wär nett wenn mir da jemand Hintergrund infos geben könnte, oder wo man das nachlesen kann.
Ich habe nämlich das Problem, dass ich sozusagen einen Ladebalken anzeigen will. Wäre es zB eine gute Lösung es folgendermaßen zu machen:
Java:
public void keyPressed(KeyEvent e)
{
new Thread(){
public void run(){
//hier laden und neuzeichnen
}
}.start();
}