如何在JtextPane或StringBuffer中对齐文本

时间:2012-04-16 16:52:11

标签: java swing jtextpane text-alignment stringbuffer

我正在使用JTextPane并希望对齐我从StringBuffer收到的文本结果。运行结果的线程返回一个包含所有请求结果的String,稍后,在另一个线程中,我将数据放在JTextPane中。

获取结果的代码(String)如下所示:

    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

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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);