2014-10-01 29 views
0

我有我需要在屏幕上繪製的東西,但這需要字體指標才能正確繪製。我也需要使用repaint()或其他的東西來繪製到屏幕上。重繪()FontMetrics

如果我有一個paintComponent(Graphics)方法,我可以通過g.getFontMetrics(g.getFont())正確檢索字體指標。問題是,我不能說它畫的是自我。它只會在發生某些事情時發生,例如正在調整組件的大小。

然後,如果我只使用正常的paint(Graphics),我可以使用repaint()來繪製我想要的,但調用g.getFontMetrics(g.getFont())不會返回正確的值。有任何想法嗎?

repaint();//I need to call repaint() or something similar to draw to the screen when I want it to 

public void paint(Graphics g){ 
    FontMetrics metrics = g.getFontMetrics(g.getFont());//Returns different metrics than that of paintComponent(Graphics) 
} 

public void paintComponent(Graphics g){ 
    FontMetrics metrics = g.getFontMetrics(g.getFont());//Returns different metrics than that of paint(Graphics) 
} 
+0

你想畫什麼?東西像一個長方形,裏面有文字? – 2014-10-01 11:48:58

+0

http://stackoverflow.com/questions/2753514/java-friendlier-way-to-get-an-instance-of-fontmetrics有幫助嗎? – DavidPostill 2014-10-01 11:50:06

+0

另外我會將字體作爲一個變量存儲在你的類中,而不是覆蓋痛苦() – 2014-10-01 11:51:46

回答

2

的問題是,我不能告訴它畫它的自我。

您只需在組件上使用repaint()。 repaint()方法將調用paint(),然後調用paintComponent()。有關更多信息,請參閱A Closer Look at the Paint Mechanism

我將其設置爲可變,並使用該字體的對象,而不是使用g.getFont()

從上面給你的教程鏈接會看到,你應該是壓倒一切的paintComponent()不畫(),所以這不是問題。