0

我有一个可滚动的 JTextArea,它显示来自对象 ArrayList 的输出。在将每个元素附加到一行之后,它会转到下一行以附加来自下一个元素的信息。但是,我的输出看起来杂乱无章。无论每个元素的长度如何,我都希望每个属性都能相互对齐。我尝试使用循环在每个属性之间创建偶数个空格,但它们仍然没有正确排列。

这是将字符串从对象附加到 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);
}

这是文本区域的样子。

输出画面

4

2 回答 2

2

问题是,默认情况下,文本区域使用可变宽度字体。更改为等宽字体将解决问题,例如

text.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 18));
于 2021-04-23T07:46:42.733 回答
0

请注意,JTextArea 支持制表位。这意味着您可以通过在文本后插入一个制表符(字符 )来将文本格式化为一种临时表格,以将\t剩余空间填充到文本区域的制表符大小,形成一个表格单元格。

也可以使用该textArea.setTabSize​(int size)方法更改选项卡大小。我认为这甚至不需要等宽字体。

在您的情况下,代码看起来像

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

等等。

不过,使用 JTable 可能更可取。

于 2021-04-23T22:52:19.463 回答