2012-04-16 63 views
0

我正在使用JTextPane并希望对齐从StringBuffer收到的文本结果。运行结果的线程返回一个包含所有请求结果的字符串,然后在另一个线程中将数据放入JTextPane中。如何在JtextPane或StringBuffer中对齐文本

代码即可获得结果(字符串)看起来是这样的:

info.append("\n\nResult:\n"); 

    for (TResult result : results) 
     info.append(result.getID()); 

    info.append("\n"); 

    for (TResult result : results) 
     info.append(result.getApprovalDateStr+"    "); //the space is used for the alignment 

    info.append("\n"); 

    for (TResult result : results) 
     info.append(result.getState+","+result.getCity()+"     "); 

显然,取决于一个国家/城市在屏幕上的结果是不一致的长度。任何人都可以指出应该使用什么来整齐排列。这可以通过StringBuffer完成,也可以在JTextPane中完成。下面

由于

是所期望的结果的屏幕截图。

enter image description here

+1

这是不相关的,但我更喜欢'SteingBuilder'超过'StringBuffer' ... – fireshadow52 2012-04-16 17:00:12

+2

JTextPane将支持格式化文档,如RTF和HTML。您可以将其格式化为HTML表格。 – 2012-04-16 17:26:57

回答

3

呼叫

textPane.setContentType("text/html"); 

,并使用HTML表格:

info.append("<html><table>"); 

for (TResult result : results) 
    info.append("<tr><td>"+result.getID()+"</td><td>"+result.getApprovalDateStr+"</td><td>"+result.getState+","+result.getCity()+"</td></tr>"); 

info.append("</table></html>"); 

//then 
textPane.setText(info.toString()); 
+0

太棒了,谢谢! – adhg 2012-04-17 01:28:19

1

定义一个辅助函数:

private void log(StringBuilder buffer, String data, int numberOfSpaces) { 
    buffer.append(String.format("%" + numberOfSpaces + "s", data)); 
} 

然后:

for (TResult result : results) 
    log(info, result.getID(), 30); 

info.append("\n"); 

for (TResult result : results) 
    log(info, result.getApprovalDateStr, 30); 

info.append("\n"); 

for (TResult result : results) 
    log(info, result.getState+","+result.getCity(), 30); 
+0

是的,这个伎俩,但我决定使用Elias解决方案,因为它在未来的维护提供了更大的灵活性。 +1。谢谢! – adhg 2012-04-17 01:27:59