Java:如何动态地将绘制的文本放入窗口中

时间:2011-01-11 13:06:26

标签: java swing text metrics paint

我试图在我的框架/组件上画一个大的“你好世界”。 但我想动态地适应窗口大小。因此,每当我调整窗口大小时,文本应完全适合窗口。

我使用FontMetrics类来指定字体,并测量字符的宽度和高度。

但是有一个方法我用文本传递一个组件的大小并且该方法返回我需要使用的字体会很好。那么,特定字体的字体大小就足够了。

这样的事情:

public int getFontSizeForDrawArea( int width, int height, String text, Font font) {
  //Pseudo class FontMeasureClass takes a font to do the measures with
  FontMeasureClass measure = new FontMeasureClass( font);

  // method takes size of frame/component and text to return the needed 
  // font size to fit text to frame/component
  return measure.getFontSize( width, height, text);
}

我考虑制作一种方法,通过尝试循环来测量文本的大小,直到大小与窗口的高度和高度相近。但也许有一些东西可以使用。

3 个答案:

答案 0 :(得分:2)

以像素为单位测量字符串宽度的一种方法是:

Font myfont = jTextField1.getFont();      
FontMetrics myMetrics = getFontMetrics(myfont);
int width=SwingUtilities.computeStringWidth(myMetrics, jTextField1.getText()); 

这是另一个,它还计算了它的高度(以像素为单位):

Font myFont = new Font("Arial", Font.PLAIN, 10);
FontMetrics myMetrics = new FontMetrics(myFont) {};
Rectangle2D boundsOfString = myMetrics.getStringBounds("Measure this String", null);
int width = (int) boundsOfString.getWidth();
int height = (int) boundsOfString.getHeight();

我会用你上面提到的循环来做。

答案 1 :(得分:2)

您可以计算宽度并以大字体绘制文字,并使用Graphics2D.scale将其调整大小。通常,paintComponent-Method接收Graphics2D对象,因此您可以将Graphics对象转换为Graphics2D。

答案 2 :(得分:0)

您不必使用循环,但可以在计算错误后估计合适的字体大小,因为大多数字体按比例缩放(尽管字体可能包含不同大小的不同字形)。

E.g。如果您的绘画区域宽度为1000px,并且100pt字体大小的计算宽度为1250px,则字体大小为100pt * 1000px / 1250px = 80pt应该会产生1000px的宽度。