簡體   English   中英

Java JFrame / Canvas 不會重繪

[英]Java JFrame / Canvas doesn't repaint

鼠標偵聽器調用repaint()並且我可以看到它確實經過了繪圖部分,因為我看到 globalcounter 在System.out.println()的輸出中遞增。 然而,在屏幕上,我看不到任何變化,直到我最小化窗口並再次最大化、調整它的大小或將其移出可見屏幕區域再移回。顯然我希望它在沒有我干預的情況下進行更新。

class GUI extends javax.swing.JFrame {
int globalcounter=0;
  class MyCanvas extends Canvas {

  @Override
  public void paint(Graphics g) {
    globalcounter++;
    g.drawString(globalcounter,100,100);
    System.out.println(globalcounter);
    }

  }
}

(最初我從不斷更新的文件(網絡攝像頭)加載圖像並將其繪制在畫布上。當我將其部分拖出可見屏幕區域並重新拖回時,“外面”的部分被刷新,其余的沒有。)

revalidate()而不是repaint()沒有改變任何東西。

我知道這篇文章是Java 重繪無法正常工作的重復,但是當我在那里發布它時它被刪除了。

為什么要向 Swing 組件 JFrame 添加 AWT 組件 Canvas? 您應該只堅持使用 Swing 組件。 而且您是否知道 MyCanvas 的大小,以及您如何將它添加到 JFrame 中,因為您沒有顯示此代碼。

考慮

  • 使用 JPanel 而不是 Canvas 對象,
  • 在其paintComponent方法中繪制,
  • 如果您仍然卡住,請向我們展示sscce
  • 而且,如果您所做的只是繪制文本,請使用 JLabel 而不是在 paint/paintComponent 中繪制,並使用其 setText(...) 方法更改其文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM