-1

メイン クラスとプレーヤー クラスに 2 つの JList と 1 つの項目の ArrayList があります。

  private ArrayList<Item> allItems= new ArrayList<Item>();

  listItemsShop= new JList(allItems.toArray());

  listItemsInv= new JList(currentPlayer.getAllItems().toArray());

おそらくほとんどの人が認識しているように、toArray メソッドはコレクション「allItems」の内容を配列として返します。これにより、JList コンポーネントで使用できるようになります。

次に、JList コンポーネントは、Items クラスの toString メソッドを呼び出し、その中のすべてを返します。例えば

    @Override
public String toString() {
    return  name + "," + "$"+price;
}

これは、最初の JList 'listItemsShop' では問題ありませんが、2 番目の JList では価格を表示したくありません。2 番目の JList はインベントリなので、アイテムは購入されています。アイテム名と、損傷の量や状態などの詳細のみを表示したいのですが..

これを行う方法を知っている人はいますか?誰かが重複したクラスを作成し、2 番目のクラスをそのように toString メソッドに上書きしたことを読んだことがありますが、これは大きな冗長性のように思えます。誰かがこれを回避する別の方法を知っているなら、私はあなたから聞いてみたい.

乾杯

4

2 に答える 2

1

JList を使用しないでください。代わりに JTable を使用してください。次に、表示する列を制御できます。詳細については、テーブルの使用方法を参照してください。

于 2013-05-23T15:08:26.703 に答える
0

編集:申し訳ありませんが、質問を読み違えました。Trushgod が示唆するように、セル レンダラーを使用することをお勧めします。

public class ItemCellRenderer extends DefaultListCellRenderer {
   public static enum Type {SHOP, INVENTORY;}

   private Type type;

   public ItemCellRenderer(Type t) {
      super();
      this.type = t;
   }

   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
      Item item = (Item) value;
      if (type == Type.SHOP) {
         label.setText(item.getPrice());
      } else if (type == Type.INVENTORY) {
         label.setText(item.getData());
      } else {
         label.setText(null);
      }
      return label;
   }
}

次のように使用できます。

listItemsShop.setCellRenderer(new ItemCellRenderer(ItemCellRenderer.Type.SHOP));
listItemsInv.setCellRenderer(new ItemCellRenderer(ItemCellRenderer.Type.INVENTORY));

古い

string メソッドは item クラスにコーディングするより、在庫・ショップに委譲した方が良いと思います。お気に入り

class Inventory {
   public String toString(Item item) {
      return item.getName() + " " + item.getStats();
   }
}

そしてお店へ

class Shop {
   public String toString(Item item) {
      return item.getName() + " $" + item.getPrice();
   }
}
于 2013-05-23T09:40:59.593 に答える