2017-03-01 83 views
0

我正在爲處理矩陣的程序創建一個輸出窗口。它應該打印出格式化版本的預製命令。但我在對齊方面遇到問題。我知道String.format工程,因爲我有一個toString()方法,可以正常工作。等寬html格式jlabel

https://i.stack.imgur.com/rqfzG.png

通知如何第二和第三行沒有被正確地間隔開。這是因爲100.00已經完全填充了格式化的字符串,因爲0.00需要額外的空間來填充字符串(請參閱toHtml())。我相信這與HTML的顯示方式有關,但我不確定。我的猜測是零後面的空格沒有正確顯示或正在合併。

以下是涉及的方法。

public String toHtml(int dec) 
{ 
    String[] colors = {"#C0C0C0","#FFFFFF"}; 
    String f = "%-"+(getLongestValue()+dec+1)+"."+dec+"f"; 
    String res = ""; 
    for(int r = 0;r<rows;r++) 
    { 
     for(int c = 0;c<columns;c++) 
     { 
      res += "<span style=\"background-color:"+colors[(r+c)%2]+";\">"+String.format(f, contents[r][c])+"</span>"; 
     } 
     res += "<p>"; 
    } 
    return res; 
} 

它創建要顯示的HTML文本。方法getLongestValue()返回數組「內容」中小數位之前的任意數字的最大長度。

newOutput("New Matrix ["+name+"]<br>"+m.toHtml()); 

public void newOutput(String s) 
{ 
    JLabel l = new JLabel("<html>"+s+"<br></html>"); 
    l.setFont(new Font("Monospaced",1,18)); 
    jPanel1.add(l); 
} 

這增加了標籤到輸出窗口

另外,這裏是參考矩陣的

public String toString() 
{ 
    String f = "%-"+(getLongestValue()+3)+".2f "; 
    String res = ""; 
    for(int r = 0;r<rows;r++) 
    { 
     for(int c = 0;c<columns;c++) 
     { 
      res += String.format(f, contents[r][c]); 
     } 
     res += "\n"; 
    } 
    return res; 
} 

輸出通過的toString的toString()方法() toString Output

A m礦石極端版本 https://i.stack.imgur.com/ZQKnB.png

在這種情況下,程序應該已經發現最大值爲-15或-20,並將格式長度的大小設置爲6(3爲長度,2爲小數位,1爲1對於十進制),但它並沒有出現除了我提到的兩個值之外的任何值都遵循該格式。

這裏的toString()爲前面的例子 toString() output

+0

您可以精確地寫一些你本來期望? –

回答

1

這修復它的輸出,空間的arent被正確地表示爲等寬

public String toHtml(int dec) 
{ 
    String[] colors = {"#C0C0C0","#FFFFFF"}; 
    String f = "%-"+(getLongestValue()+dec+2)+"."+dec+"f"; 
    String res = ""; 
    for(int r = 0;r<rows;r++) 
    { 
     for(int c = 0;c<columns;c++) 
     { 
      res += "<span style=\"background-color:"+colors[(r+c)%2]+";\">"+ 
        String.format(f, contents[r][c]).replaceAll("\\s", ((char)160)+"")+"</span>"; 
     } 
     res += "<p>"; 
    } 
    return res+""; 
}