我有一个可滚动的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);
}
下面是文本区域的外观。
输出屏幕
2条答案
按热度按时间wvt8vs2t1#
问题是,默认情况下,文本区域使用可变宽度字体。改成等距字体可以解决这个问题。
w80xi6nr2#
注意,jtextarea支持制表位。这意味着您可以通过插入制表符(字符)将文本格式化为某种临时表
\t
)将文字后的剩余空间填充到文字区域的制表符大小,形成表格单元格。也可以使用
textArea.setTabSize(int size)
方法。我认为这甚至不需要等距字体。在您的情况下,代码看起来像
等等。
不过,使用jtable可能更好。