Ho un codice del genere:repaint() in Java non "ri-dipinge" immediatamente?
// In MyPanel.java
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// Draw something
mypanel_count++;
}
// In Test.java
public void testLargeData()
{
while (notDone)
{
panel.repaint();
// do huge work
test_count++;
System.out.println("Test_count: " + test_count + ", MyPanel_count: " + mypanel_count);
}
}
// Output !!!
Test_count: 752, MyPanel_count: 23
Test_count: 753, MyPanel_count: 23
Test_count: 754, MyPanel_count: 23
Test_count: 755, MyPanel_count: 24
Ma quando cambio panel.repaint()
al panel.paintComponent(panel.getGraphics())
, il fuori è giusto:
Test_count: 752, MyPanel_count: 752 Test_count: 753, MyPanel_count: 753 Test_count: 754, MyPanel_count: 754 Test_count: 755, MyPanel_count: 755
Perché? Il metodo paintComponent
funziona, ma a volte è cieco, quindi non voglio usarlo. Qualcuno può darmi qualche suggerimento? Grazie!
http://stackoverflow.com/questions/9389187/difference-travel-componente-in-componente-e-pompetenti-in-swing. – Raghunandan
@Raghunandan: grazie per la tua risposta, ma non è un problema mio. –
hai provato [JComponent.html # paintImmediately (int, int, int, int)] (http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintImmediately%28int ,% 20int,% 20int,% 20int% 29) – mKorbel