簡體   English   中英

Java中的字符串長度(以像素為單位)

[英]String length in pixels in Java

有沒有辦法以像素為單位計算字符串的長度,給定某個java.awt.Font對象,它不使用任何 GUI 組件?

不使用任何 GUI 組件?

這取決於你在這里的意思。 我假設您的意思是您想在不接收HeadlessException情況下執行此操作。

最好的方法是使用BufferedImage AFAIK,這不會拋出HeadlessException

Font font = ... ;
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
FontMetrics fm = img.getGraphics().getFontMetrics(font);
int width = fm.stringWidth("Your string");

除了使用這樣的東西,我認為你不能。 您需要一個圖形上下文來創建FontMetrics並為您提供字體大小信息。

您可以使用Graphics2D對象來獲取字體邊界(包括寬度):

Graphics2D g2d = ...
Font font = ...
Rectangle2D f = font.getStringBounds("hello world!", g2d.getFontRenderContext());

但這取決於您將如何獲取Graphics2D對象(例如從Image )。

這為我提供了 (137.0, 15.09375) 的輸出。 我不知道單位是什么,但它看起來按比例正確並且不直接使用 Graphics2D。

    Font f = new Font("Ariel", Font.PLAIN, 12);
    Rectangle2D r = f.getStringBounds("Hello World! Hello World!", new FontRenderContext(null, RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT, RenderingHints.VALUE_FRACTIONALMETRICS_DEFAULT));
    System.out.println("(" + r.getWidth() + ", " + r.getHeight() + ")"); 

我需要在調用paintComponent 之前獲取字符串的長度和寬度,以便我可以將封閉面板的大小調整為文本尺寸。 這些技術都沒有提供足夠的寬度,而且我沒有可用的 Graphics 對象。 我通過將字體設置為“等寬”解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM