【问题标题】:Align Strings in columns in JTextArea在 JTextArea 中的列中对齐字符串
【发布时间】:2020-07-16 18:51:18
【问题描述】:

我想在 JTextArea 中打印字符串并正确对齐它们。很难解释,所以我将上传我想要实现的屏幕截图。

所以每行打印的字符串都是从具有参数(id、title、author、date、rank)的 Paper 对象打印的。数据从文本文件中读取,并使用 loadPaper() 函数存储在 LinkedList 中。

然后使用displayPapers()函数将Paper对象的内容显示到JTextArea。 displayPapers() 如下:

/** Print all Paper object present in the LinkedList paperList to textArea */
public void displayPapers(){
    // clear textArea before displaying new content
    displayTxtArea.setText("");

    Paper currentPaper;
    ListIterator<Paper> iter = paperList.listIterator();

    while(iter.hasNext()){
        currentPaper = iter.next();
        String line = currentPaper.toString();

        if("".equals(line)){
            continue;
        } // end if

        String[] words = line.split(",");
        displayTxtArea.append   ("  " 
                                + padString(words[0],30) 
                                + padString(words[1],30) 
                                + "    " 
                                + padString(words[2],30) 
                                + "  " 
                                + padString(words[3],30)  
                                + padString(words[4],30) 
                                + "\n");

        System.out.println(words);
        //displayTxtArea.append(currentPaper.toString());
    } // end while

    displayTxtArea.append("  Total " + noOfPapers + " entries!");

} // end showAllPaper

padString() 函数将空格添加到字符串中,以便它们都具有相同数量的单词。下面列出了 PadString():

/** Add spaces to Strings so that all of the are of same number of characters
 *  @param str  String to be padded
 *  @param n    total number words String should be padded to
 * @return str  Padded string 
 */
private String padString(String str, int n){
    if(str.length() < n){
        for(int j = str.length(); j < n; j++){
            str += " ";
        } // end for
    } // end if
    return str;
} // end padString

我已经为此工作了一段时间,但仍然无法找到解决方案。如您所见,并非所有内容都按预期完美对齐。

如何将它们完美对齐以使其看起来更好?谢谢。

【问题讨论】:

  • 为什么不使用 JTable?在列中显示数据似乎更合适。
  • 我宁愿选择一个 JTable,它可以让你灵活地处理列大小和位置等。

标签: java swing jtextarea


【解决方案1】:

仅当您使用等距字体时,输出才会在您的 JTextArea 中“正确”对齐。例如,“Andale Mono 14”就可以了。

另外,为了让您的生活更轻松并避免填充地狱,请使用 String.formatsyntax

String format = "%1$5s %2$-40s %3$-20s";
String someLine;
while (whatEver...) {
   ... 
   someLine = String.format(format, aNum, aName, aDate);
   jTextArea1.append(someLine + "\n");
}

【讨论】:

  • 非常感谢。这就是我一直在寻找的东西。解决了我的问题。干杯。
  • JTable 可能没问题,但坚持使用 JTextArea 允许将其他未格式化的信息添加到同一组件以及更多表(如果需要)。
  • 单行距做得很好。
【解决方案2】:

请改用JTable(对于显然是表格信息的内容)。有关更多详细信息和工作示例,请参阅How To Use Tables

【讨论】:

    【解决方案3】:

    您可以将HTML 与swing 组件一起使用,也可以使用JEditorPane

    JLabel jt=new JLabel();
    jt.setText("<html>
                <table border='1'>
                   <tr><th>No</th><th>Name</th></tr>
                   <tr><td>1</td><td>Mr.A</td></tr></table></html>");
    

    【讨论】:

      【解决方案4】:

      如果您的问题允许,您还可以更改 JTextArea 的字体

      textArea.setFont(new Font("monospaced", Font.PLAIN, 12));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-06-01
        • 2016-03-28
        • 2016-02-05
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        相关资源
        最近更新 更多