显示具有等宽字体的树(如在记事本中)

时间:2014-01-11 14:07:03

标签: java string text tree monospace

目前我有一个生成树的程序。我使用https://stackoverflow.com/a/8948691来获取树的字符串输出。为此,我稍微修改了链接中的函数:而不是使用System.out.println我重写了代码以符合我的要求:

public String getStringRepresentation(String prefix, boolean end, int position)
    {
        String retval = prefix + (position != -1? (end ? "└──" : "├──") + " " + position  +(branches==null? "[" + content + "]" : ""):"") + "\r\n";
        if(branches != null)    
        {
            for (int i = 0; i < branches.size() - 1; i++) {
                retval += branches.get(i).getStringRepresentation(prefix + (end ? "    " : "│   "), false,i);
            }
            if (branches.size() >= 1) {
                 retval += branches.get(branches.size() - 1).getStringRepresentation(prefix + (end ?"    " : "│   "), true,branches.size() - 1);
            }
        }
        return retval;   
    }

示例文本输出将是

├── 0
│   ├── 0[F]
│   └── 1
│       ├── 0[V]
│       └── 1[A]
└── 1
    ├── 0[D]
    └── 1[S]

此字符串I显示以下内容:

JTextArea textarea = new JTextArea(infoMessage);
        textarea.setFont(new Font("monospaced", Font.PLAIN, 14));
        JOptionPane.showMessageDialog(null, textarea);

看起来像这样:

output of above code

(如您所见,对齐方式不应该如此。)

2 个答案:

答案 0 :(得分:0)

我发现了问题。显然,monospaced不是正确的字体。如果我使用“consolas”(记事本使用的那个),一切都会正确显示。

答案 1 :(得分:-2)

以下是打印二进制树的java代码,如下所示:

IndexOf

代码:

     1
    / \
   /   \
  2     \
 / \     3
4   5   / \
       9   \
            8
           / \
          6   7