2013-02-12 101 views
3

對於一個項目,我需要打印一些打印機號碼。他們需要打印在彼此之下,並在逗號上對齊。字體不是,也不能是等寬字體。我正在使用DecimalFormat(「0.000」)將所有數字轉換爲以3位小數結尾的字符串。用逗號打印逗號對齊的打印機設備雙打

將逗號之間的數字對齊的正確方法是什麼?我正在使用Java的可打印接口,如http://docs.oracle.com/javase/tutorial/2d/printing/index.html所述。

感謝

編輯:我並不想打印到控制檯,但到打印機(其中真正的紙出來的實際硬件的東西)

回答

0

只是將它們轉換爲字符串對齊和然後打印這些字符串:

public static String align (String str) 
{ 
    int n = str.indexOf('.'); 

    StringBuilder sb = new StringBuilder(); 
    for (int i = n; i < 3; i++) 
     sb.append ((char)0x2007); // Append FIGURE-SPACE character 
    sb.append (str); 
    return sb.toString(); 
} 

public static void main(String[] args) { 
    Random r = new Random(); 
    DecimalFormat format = new DecimalFormat("0.000"); 

    for (int i = 0; i < 10; i++) 
    { 
     String str = format.format(Math.pow (r.nextDouble(), 3.0) * 150.0); 
     System.out.println(align (str)); 
    } 
} 
+0

之前小數

  • 逗號
  • 數可惜我不是打印到控制檯,我使用的是圖形打印到打印機設備。 drawString(String str,int x,int y)和字符串str從位置x,y開始從左到右(如此左對齊)打印。控制檯是等寬的,這很容易... – Warkst 2013-02-12 14:14:27

  • +0

    即使在非等寬字體中,所有數字通常具有相同的寬度,並且存在特殊的Unicode字符「圖形 - 空間」(U + 2007),其寬度與數字。 – 2013-02-12 14:32:56

    1

    這對於等寬字體肯定會更好。

    我假設逗號是小數點。這是我會做的。

    • 使用drawString生成逗號圖像。

    • 將數字分解爲兩部分,即小數點前的數字和小數點後的數字。

    • 使用drawString生成小數點前的數字圖像和小數點後的數字。

    • 將所有數字轉換爲圖像後,遍歷小數點後面的數字以查看哪一個具有最長寬度。

    • 現在,您可以獲得小數點後最長數字和逗號的寬度像素數。

    • 再次瀏覽數字圖像,按以下順序在打印機畫布上繪製圖像。後

      • 數小數點
    +0

    感謝您的意見。我試圖做類似的事情,分割小數點的數字,並將小數部分打印在以逗號爲前綴的固定點上,並在整數部分前綴。問題是我找不到整數部分的錨點x,因爲它具有可變長度。我已經嘗試過'fontMetrics.charsWidth(...)'並將數字的整數部分(作爲字符串)作爲參數引發,但這不起作用。我想我只是通過定義charwidth並遍歷string.toCharArray()來模仿等寬字體。再次感謝! – Warkst 2013-02-12 15:49:18

    +0

    在旁註中,我無法使打印機單面打印(在不同的項目上)。果然,我將圖形環境的字體設置爲等寬字體('新Font(「Monospaced」,Font.PLAIN,12)'),它在Mac上生成等寬字體,而不是在Windows上。這是打印機制造商的驅動程序問題還是我可以做任何事情?我也嘗試過Courier和Consolas字體。 – Warkst 2013-02-12 16:05:15

    +1

    http://stackoverflow.com/questions/11020978/monospaced-font-symbols-for-jtextpane – 2013-02-12 16:23:47