【发布时间】: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
【问题讨论】:
标签: java
我希望使用 Java2D drawString 来实现以下外观。
但是,我不知道如何实现以下文本对齐方式?
我们可以看到,“Date:”、“Open:”、...都左对齐。
并且 "30-Nov-09", '1262.000", ... 都在右对齐。
alt text http://sites.google.com/site/yanchengcheok/Home/drawstring.png
【问题讨论】:
标签: java
要使文本右对齐,您可以计算出正在渲染的文本的宽度,然后从 x 坐标中减去该宽度。例如:
g.drawString(s, rightEdge - fontMetrics.stringWidth(s), y);
【讨论】:
为了加快速度,我详细阐述了劳伦斯的答案:
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);
【讨论】:
不特定于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 指出的,这仅适用于固定大小的字体。
【讨论】: