0

私はスイングライブラリを学ぶために書いている単純なJavaアプリケーションのテキストエリアに表示する2つのフィールドを持っています.

基本的に、この小さなアプリにはクリックできるボタンがいくつかあり、各ボタンの値は 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. JTextArea の代わりに HTML で JLabel を使用します。これはおそらく最も簡単な方法です。<html> でテキストを開始する場合は、スタックされた <div> 要素とネストされた <span> を使用し、CSS を使用してテキストを配置できます。HTML 3.2 と CSSほぼ2 のみですが、コストを揃えるには十分でしょう。

  2. 本当にテキスト領域のように見せて動作させたい場合は、JTextArea を使用せず、HTMLEditorKit などで一種の JEditorPane を使用し、生成したいテキストを生成する HTML を構築します。#1を参照してください。

  3. 本当に JTextArea を使用したい場合は、FontMetrics オブジェクトを使用して文字列の幅を測定し、スペースなどの数を決定できます。コストをその場所に配置するには、追加する必要があります。ここにチュートリアルがあります: http://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html

HTH、

于 2013-11-02T01:15:15.540 に答える