如何格式化jtext区域中的文本?

5fjcxozz  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(394)

我有一个可滚动的jtextarea,它显示了一个对象数组列表的输出。将每个元素附加到一行之后,它将转到下一行以附加来自下一个元素的信息。但是,我的输出看起来没有条理。我想让每个属性彼此对齐,而不考虑每个元素的长度。我尝试使用循环在每个属性之间创建偶数个空格,但它们仍然没有正确排列。
下面是将对象中的字符串附加到jtextarea的函数

public static void appendOutputForTextArea(List<Book> catalog) {
    String output = ""; 
    mainFrame.displayArea.setText("");
    int titleCol = 50; 
    int authorCol = 50; 
    int isbnCol = 50;  
    for(int i=0; i < catalog.size(); i++) {
        output += catalog.get(i).getTitle(); 
        for(int k=catalog.get(i).getTitle().length(); k < titleCol; k++) {
            output += " ";  // create enough whitespace before next element
        } 
        output += catalog.get(i).getAuthor();    
        for(int k=catalog.get(i).getAuthor().length(); k < authorCol; k++) {
            output += " ";
        } 
        output += catalog.get(i).getIsbn(); 

        for(int k=catalog.get(i).getIsbn().length(); k < isbnCol; k++) {
            output += " ";  
        } 

        output += catalog.get(i).getQuantity(); 
        output += "\n";  

    }
    mainFrame.displayArea.append(output);
}

下面是文本区域的外观。
输出屏幕

wvt8vs2t

wvt8vs2t1#

问题是,默认情况下,文本区域使用可变宽度字体。改成等距字体可以解决这个问题。

text.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 18));
w80xi6nr

w80xi6nr2#

注意,jtextarea支持制表位。这意味着您可以通过插入制表符(字符)将文本格式化为某种临时表 \t )将文字后的剩余空间填充到文字区域的制表符大小,形成表格单元格。
也可以使用 textArea.setTabSize​(int size) 方法。我认为这甚至不需要等距字体。
在您的情况下,代码看起来像

output += catalog.get(i).getTitle() + "\t";

等等。
不过,使用jtable可能更好。

相关问题