【问题标题】:Use Java drawString to achieve the following Text alignment使用Java drawString实现如下Text对齐
【发布时间】: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


    【解决方案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 指出的,这仅适用于固定大小的字体。

        【讨论】:

          猜你喜欢
          • 2012-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-06
          • 2011-06-14
          • 2017-12-08
          • 2020-11-22
          相关资源
          最近更新 更多