2016-04-07 38 views
1

我想在面板上以像素爲單位獲取我的字符串的確切高度。所以我寫了一個程序來繪製字符串,然後在它周圍繪製一個矩形。FontMetrics返回錯誤的高度

使用的FontMetrics我用getStringBounds方法讓我封閉的矩形。

但是它看起來錯誤:

enter image description here

我期待矩形完全包圍我的文字,但在頂部(與空間上左邊一點點,右),有空間。爲什麼它給了我這個結果?

這裏是我的代碼:

public class Test extends JPanel { 

    @Override 
    protected void paintComponent(Graphics g) { 

     Font font = new Font("Arial", Font.PLAIN, 60); 
     g.setFont(font); 

     FontMetrics fm = this.getFontMetrics(font); 

     String str = "100dhgt"; 
     Rectangle2D rect = fm.getStringBounds(str, g); 

     int x = 5; 
     int y = 100; 

     g.drawRect(x, y - (int)rect.getHeight(), (int)rect.getWidth(), (int)rect.getHeight()); 
     g.drawString(str, x, y); 
    } 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 

     Test test = new Test(); 
     f.add(test); 
     f.setVisible(true); 
     f.setSize(400, 400); 
    } 

} 

回答

2

關於您的矩形做一些字體,你必須要考慮字體的降序(多遠線以下)

g.drawString(str, x, y - fm.getDescent()); 

另請注意,字體高度通常考慮某種行間距。在這種情況下,fm.getDescent()+ fm.getAscent()= 68,而fm.getHeight()= 70

2

上方的空間可以由您不考慮下降(這讓我回想起我最喜歡的方法之一,從Java 1.0:getMaxDecent)來解釋

否則,箱子看起來不錯。我能提供的唯一的建議就是fm.getStringBounds工作更好地與比它與其他

+0

也考慮'TextLayout',審查[這裏](http://stackoverflow.com/a/16014525/ 230513)。 – trashgod

+0

這樣的界限有點​​像寫在橫格紙上的文字? IE瀏覽器。就像在學校裏你必須寫下g和y一樣。 –

相關問題