使用Java drawString实现如下Text对齐

Posted

技术标签:

【中文标题】使用Java drawString实现如下Text对齐【英文标题】:Use Java drawString to achieve the following Text alignment 【发布时间】:2020-07-10 08:25:25 【问题描述】:

我希望使用 Java2D drawString 来实现以下外观。

但是,我不知道如何实现以下文本对齐方式?

我们可以看到,“Date:”、“Open:”、...都左对齐。

并且 "30-Nov-09", '1262.000", ... 都在右对齐。

alt text http://sites.google.com/site/yanchengcheok/Home/drawstring.png

【问题讨论】:

【参考方案1】:

要使文本右对齐,您可以计算出正在渲染的文本的宽度,然后从 x 坐标中减去该宽度。例如:

g.drawString(s, rightEdge - fontMetrics.stringWidth(s), y);

【讨论】:

【参考方案2】:

为了加快速度,我详细阐述了劳伦斯的答案:

Graphics2D g2 = (Graphics2D)graphics;
g2.setFont(new Font("monospaced", Font.PLAIN, 12)); // monospace not necessary
FontMetrics fontMetrics = g2.getFontMetrics();
String s = "Whatever";
g2.drawString(s, rightEdge - fontMetrics.stringWidth(s), y);

【讨论】:

【参考方案3】:

不特定于drawString,但一般来说,如果您想打印格式化为固定宽度的字符串集,您可以通过将其中的字段与所需数量的空格连接起来,将每一行简单地生成为字符串。代码看起来像这样:

String[] makeLines(String[] labels, String[] data, int width)
   String[] lines=new String[labels.length];
   StringBuilder spaces=new StringBuilder();
   for(int i=0;i<width;i++)
      spaces.append(" ");

   for (int i=0;i<labels.length;i++)
      lines[i]=labels[i]+spaces.substring(0,width-data[i].length()-labels[i].length())+data[i];
   
   return lines;

编辑:正如 Laurence Gonsalves 指出的,这仅适用于固定大小的字体。

【讨论】:

以上是关于使用Java drawString实现如下Text对齐的主要内容,如果未能解决你的问题,请参考以下文章

JAVA drawString问题

java语言或j2me的问题!在画布界面用一个drawString怎么实现自动换行?(就是文字很长,大于屏幕的宽时...

Graphics DrawString 画出字体怎么不一样大啊?

不支持TrueTypeFont.drawString()

Java AWT Graphics更改drawString()的背景颜色[重复]

如何在 Java 中居中 Graphics.drawString()?