Tôi có một mã như thế:repaint() trong Java không "vẽ lại" ngay lập tức?
// 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
Nhưng khi tôi thay đổi panel.repaint()
để panel.paintComponent(panel.getGraphics())
thì ra là đúng:
Test_count: 752, MyPanel_count: 752 Test_count: 753, MyPanel_count: 753 Test_count: 754, MyPanel_count: 754 Test_count: 755, MyPanel_count: 755
Tại sao? paintComponent
phương pháp hoạt động, nhưng đôi khi nó mù, vì vậy tôi không muốn sử dụng nó. Bất kỳ ai cũng có thể cho tôi một số gợi ý? Cảm ơn!
http://stackoverflow.com/questions/9389187/difference-between-paint-paintcomponent-and-paintcomponents-in-swing. – Raghunandan
@Raghunandan: cảm ơn câu trả lời của bạn, nhưng đó không phải là rắc rối của tôi. –
bạn đã thử [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