2010-01-30 4 views
5

Я хочу использовать Java2D drawString для достижения следующих возможностей.Использовать Java drawString для достижения следующего выравнивания текста

Однако у меня есть идея, как я достигаю следующего выравнивания текста?

Как мы видим, «Дата:», «Открыть:», ... все выровнены влево.

И «30-ноября-09», «1262,000" , ... все выровнены вправо.

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

ответ

15

Для правой выравнивать текст вы можете выяснить ширину текста вы рендеринг, а затем вычесть эту ширину от й-координат, например:.

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

не специфичны для drawString, но в общем, если вы хотите печатать наборы строк, отформатированных в фиксированной ширину, вы можете просто генерировать каждая строка в виде строки путем конкатенации e полей с необходимым количеством промежутков между ними. Код будет выглядеть примерно так:

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; 
} 

Edit: Как Laurence Гонсалвес отметил, что это работает только для шрифтов фиксированного размера.

+0

это работает только для шрифтов фиксированной ширины. –

6

Просто ускорить его я разработал Laurence ответ:

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);