2016-03-03 102 views
2

我有一個JPanel在這裏,我想跟蹤我給玩家的一些猜測。JPanel drawString離開字符串

每次調用paintcomponenent時都會顯示猜測。這是代碼:

@Override 
public void paintComponent(Graphics g){ 
    if(stop) { 
     g.drawString("YOU RAN OUT OF GUESSES. YOU LOSE!", getWidth()/2 - 150, getHeight()/2 - 5); 
     return; 
    } 
    for(Block block : blocks){ 
     block.draw(g); 
    } 
    g.setColor(Color.LIGHT_GRAY); 
    g.fillRect(650, 650, 100, 100); 
    g.setColor(Color.BLACK); 
    g.drawRect(650, 650, 100, 100); 

    g.drawString("CHECK", 680, 705); 
    g.drawString("Guesses Left: " + guesses, 100, 100); 
} 

什麼情況是,從的repaint()以前調用吸引到導致該方法被稱爲不消失的字符串。

這意味着在「猜對了:」之後的數字在數字開始相互疊加(從10開始並在調用該方法之前下行)之後變得不可讀。

我不明白爲什麼這應該是一個問題。我遇到的類似問題是,如果停止布爾值爲true,則應該退出該方法,而不是繪製其餘的形狀。儘管如此,所有這些形狀仍然繪製。

有人能幫我弄清楚我做錯了什麼嗎?這裏是我的兩個問題截圖:

enter image description here

而且,通過在一些偶然的測試,我發現,如果窗口大小,所有其他形狀消失,只有文字留下。

我是否對重繪方法的工作原理產生誤解?我的高中java老師告訴我,它實質上只是回憶起paintComponent()的方法,但如果這不正確,我不會感到驚訝。

+0

你可能想看看[在AWT和Swing繪畫(http://www.oracle.com/technetwork/java/painting-140037.html)和[表演自定義繪畫](http://docs.oracle.com/javase/tutorial/uiswing/painting/)以更好地瞭解繪畫在Swing中的工作原理 – MadProgrammer

+0

@ NuffsaidM8你可以看看[什麼是super.paintComponent( g)做?](http://stackoverflow.com/questions/28724609/what-does-super-paintcomponentg-do) – user3437460

+0

@ NuffsaidM8'但我不會感到驚訝,如果這是不正確的.''你似乎有一點點對你的老師有信心.. – user3437460

回答

4

會發生什麼情況是,從重繪()的調用以前繪製的琴絃......

@Override 
public void paintComponent(Graphics g) 
{ 
    ... 
} 

你需要確保面板背景畫,你做你的自定義塗裝前。該代碼應該是:

@Override 
public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    ... 
} 
+0

啊,是的,那樣做。我將其納入我的其他揮杆計劃,但Intellij並不需要它,所以我掩蓋了這一線。謝謝! – NuffsaidM8