13

java.awt.FontGUIコンポーネントを使用しない特定のオブジェクトを指定して、文字列の長さをピクセル単位で計算する方法はありますか?

4

4 に答える 4

10

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を作成してフォント サイズ情報を提供するには、グラフィックス コンテキストが必要です。

于 2012-11-12T14:49:54.720 に答える
3

オブジェクトを使用してGraphics2D、フォントの境界 (幅を含む) を取得できます。

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

ただし、それはGraphics2Dオブジェクトを取得する方法によって異なります (たとえば、からImage)。

于 2012-11-12T14:47:13.450 に答える
2

これにより、(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() + ")"); 
于 2012-11-12T15:12:24.057 に答える