Используйте Java drawString для достижения следующего выравнивания текста - PullRequest
6 голосов
/ 30 января 2010

Я хочу использовать Java2D drawString для достижения следующего вида.

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

Как мы видим, "Date:", "Open:", ... все выровнены по левому краю.

И "30-Nov-09", "1262.000", ... все выровнены вправо.

альтернативный текст http://sites.google.com/site/yanchengcheok/Home/drawstring.png

Ответы [ 3 ]

18 голосов
/ 30 января 2010

Чтобы выровнять текст по правому краю, вы можете определить ширину отрисовываемого текста, а затем вычесть эту ширину из координаты X. например:

g.drawString(s, rightEdge - fontMetrics.stringWidth(s), y);
7 голосов
/ 16 апреля 2015

Просто, чтобы ускорить его, я разработал ответ Лоренса:

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);
0 голосов
/ 30 января 2010

Не относится только к 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;
}

Редактировать: Как указывал Лоуренс Гонсалвес, это работает только для шрифтов фиксированного размера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...