如何解决如何在 JText 区域中格式化文本?
我有一个可滚动的 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);
}
这是文本区域的样子。
解决方法
问题在于,默认情况下,文本区域使用可变宽度字体。更改为等宽字体将解决问题,例如
text.setFont(new Font(Font.MONOSPACED,Font.PLAIN,18));
,
请注意 JTextArea 支持制表位。这意味着您可以通过在文本后插入制表符(字符 \t
)来将文本格式化为一种临时表格,以将剩余空间填充到文本区域的制表符大小,从而形成表格单元格。
也可以使用 textArea.setTabSize(int size)
方法更改标签大小。我认为这甚至不需要等宽字体。
在你的情况下,代码看起来像
output += catalog.get(i).getTitle() + "\t";
等等。
尽管使用 JTable 可能更可取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。