2017-08-22 35 views
0
package getcm; 

import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class test { 
    public static void main(String[] args) { 
     tpanel panel = new tpanel(); 
     JFrame app = new JFrame(); 
     app.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
     app.add(panel); 
     app.setSize(250, 250); 
     app.setVisible(true); 
    } 
} 
class tpanel extends JPanel { 
    int st = 0; 
    public void paintComponent(Graphics g) { 
     for (int h = 0; h < 2; h++) { 
      System.out.println(st); 
      st += 1; 
     } 
    } 
} 

我認爲這個結果應該是0,1,但在Eclipse中,打印的數據是0,1,2,3。雖然使用JPanel,但結果與我預期的不一樣

我有一個原因,變量ST不能機能的研究裏面的paintComponent生產,我必須得到結果0,1,(獲得的paintComponent僅一次)

請幫助我獲得結果0,1。

我不知道爲什麼這個代碼打印0,1,2,3不是0,1

+0

我用BufferedImage – fnclovers

回答

0

它是框架調整大小隻發生。 調整框架大小時,您的paintComponent會再次使用舊值「st」調用。 這是因爲,對於類「tpanel」,「st」是一個全局變量,直到你的JPanel保持打開狀態,控件不會退出「tpanel」類。

所以,它只是打印在paintComponent的不同函數調用之間調用的全局變量的值。

希望這會有所幫助。 :-)

0

因爲 paintComponent 被調用多次,每次面板得到畫 它會打印一對夫婦的想法0,1爲第一塗料,2,3爲s的Econd


如果編輯這樣的代碼,將打印

class tpanel extends JPanel { 
    int st = 0; 
    public void paintComponent(Graphics g) { 
     for (int h = 0; h < 2; h++) { 
      System.out.println(st); 
      st += 1; 
     } 
     Systen.out.println("paintComponent completed"); 
    } 
} 

輸出:

0 
1 
paintComponent completed 
2 
3 
paintComponent completed 
+0

解決了這個問題是的,謝謝你的幫助。但是我在另一種情況下必須使用變量(st),並且我只想調用paintComponent一次。你沒有想法嗎? – fnclovers

+0

你不要調用paintComponent是調用它的swing框架,你不能做任何事情,我建議你閱讀這個https://stackoverflow.com/a/15545309/2508770 – Emax

相關問題