0

在我正在编写的一个简单的 java 应用程序中,我有 2 个字段要显示到 textarea 以学习 swing 库。

基本上,这个小应用程序有几个我可以单击的按钮,每个按钮的值都存储在一个 ArrayList 中。当我按下“计算”时,我想在输出底部输出名称、值和数值的总和。

例如,ArrayList 中的元素 1 将是名称为“ItemOne”且值为 12 的对象。元素 2 将是名称为“ItemTwoHasALongName”且值为 15 的对象。

我想将以下内容输出到文本区域:

ItemOne                15
ItemTwoHasALongName    12

Total: 27

我输出值没有问题,但我无法让格式正确。这是我所拥有的:

for (MyItemObjects itemObject : objItemObjects){
    this.billTextArea.append(itemObject.getItemName() + "          " + itemObject.GetItemCost());
    total += itemObject.getmCost();
}

this.textArea.append("Total: $" + Total + "\n");

现在,我知道我不会在上面的示例中填充项目成本。每当我尝试这样做时,我都会得到看起来不正确的可怕输出。

这是我如何尝试将输出格式化为字符串的示例,然后我将字符串附加到文本区域。我怎样才能让项目名称左对齐,并且项目成本根据需要填充尽可能多的空格(基于项目名称的长度)以使成本作为每行的列排列?

String strLine = String.format("%" + maxLineLength + "s%", itemObject.getItemName() + "          " + itemObject.GetItemCost());
4

2 回答 2

2

有几种方法可以满足您的要求:

  1. 使用带有 HTML 的 JLabel 而不是 JTextArea。这可能是最简单的方法。如果你的文本以 <html> 开头,那么你可以使用堆叠的 <div> 元素和嵌套的 <span> 并使用 CSS 来放置文本。它只是 HTML 3.2 和 CSS几乎2,但它可能足以调整成本。

  2. 如果你真的希望它看起来和行为像一个文本区域,不要使用 JTextArea,使用一种 JEditorPane 与例如 HTMLEditorKit 并构建 HTML 来生成你想要生成的文本。见#1。

  3. 如果您真的想使用 JTextArea,您可以使用 FontMetrics 对象来测量字符串的宽度并确定有多少空格/等。您需要添加以将成本置于其位置。这里有一个教程:http: //docs.oracle.com/javase/tutorial/2d/text/measuringtext.html

高温下,

于 2013-11-02T01:15:15.540 回答
0

我不是摇摆专家,但我认为您可以将 textarea 设置为使用 BoxLayout 或类似内容,并将 itemObject.getItemName() 放在一个单元格中,将 itemObject.getItemCost() 放在另一个单元格中。

于 2013-11-02T00:29:19.207 回答