2013-12-16 111 views
0

我必須在橢圓形或圓圈上寫下文字 我有這段代碼(我在Stackoverflow上找到它),但我不明白一些觀點。在橢圓上繪製字符串

import java.awt.Color; 
import java.awt.FontMetrics; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class Panneau extends JPanel { 
    @Override 
    public void paintComponent(Graphics g){ 
     // Declaration 
     String text = "test"; 
     int x = 100, y = 50; 
     int ovalWidth = 50, ovalHeight = 50; 

     // Draw circle 
     g.setColor(Color.blue); 
     g.fillOval(x-ovalWidth/2, y-ovalHeight/2,ovalWidth, ovalHeight); 
     // I don't understand why x-ovalwidth/2 and y-ovalheight/2 

     // Put text into circle 
     FontMetrics fm = g.getFontMetrics(); 
     double textWidth = fm.getStringBounds(text, g).getWidth(); 
     // What is the job of getstringbounds 
     g.setColor(Color.white); 
     g.drawString(text, (int) (x - textWidth/2),(int) (y + fm.getMaxAscent()/2)); 
    } 
} 

,並感謝

+0

我不明白我們爲什麼寫:x-ovalWidth/2而不只是x,我不知道getstringbounds的工作 – HinoHara

+0

是的抱歉,剛剛注意到您的意見 – DoubleDouble

+0

請確保您正在調用'super.paintComponent '否則你最終會得到不需要的油漆文件 – MadProgrammer

回答

3

Graphics Documentation

fillOval(x, y, width, height) 

x - the x coordinate of the upper left corner of the oval to be filled. 
y - the y coordinate of the upper left corner of the oval to be filled. 
width - the width of the oval to be filled. 
height - the height of the oval to be filled. 

使用信息,以便您告訴圖形繪製圓在左上角在x - (半寬) y - (高度的一半)。原因是,它抵消了圓,所以圓的中心位於(x,y)而不是左上角。

getStringBounds

Returns: 
a Rectangle2D that is the bounding box of the specified String in the 
specified Graphics context. 

(返回一個矩形,該是足夠大的字符串)

不用說,在文檔是非常有幫助的看,當您使用各種Java類。

+0

非常感謝,所以對於第一個,cercle的中心在(x,y)和x,y是我們將放置文本的位置,因爲我看到g.drawString(text ,(int)(x - textWidth/2),(int)(y + fm.getMaxAscent()/ 2)); – HinoHara

+0

對,所以你把圓的中心和文字的中心放在同一個(x,y) – DoubleDouble

+0

oky我現在明白了,非常感謝你 – HinoHara