3

簡単な背景として、私はこれを開発するためにNetbeansを使用しています(私はSwingの経験があまりなく、開発速度を上げるチャンスで経験のポイントを失っています)。Netbeansでは、初心者ユーザーがコードを壊さないように変更できるコードが明らかに制限されています(これはすでに一度面白いことをしています)とにかく、私はオブジェクトのクラスを持っています。これらのオブジェクトにはnameプロパティがあります。アプリケーション内で、これらのオブジェクトの配列を直接初期化し、それらを「モノ」と呼びました。

Objects[] things = new Objects[2];
things[0] = new Objects("The first thing");
things[1] = new Objects("The second thing");

これは(一部書かれたプログラムを分解するのではなく)これを機能させるためのテストであるため、内容と名前は意図的に無意味です。いくつかの調査と読書の結果、次のコードを使用してオブジェクトをsetModelパラメーターにロードできる「はず」であることがわかりました。

    new javax.swing.DefaultComboBoxModel(things[].name)
//The above is the code to use within setModel, the below is the completed example
    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[].name));

これはうまくいきませんでした、そしてグーグルするための私の最善の努力にもかかわらず、これはまともな答えを突き止めるにはあまりにも具体的であるようです。最終的な結果は、私が欲しいということです。ドロップダウンリストに「最初のもの」と「2番目のもの」が表示されます。画面上のそのオブジェクトに保持されている他のデータを参照することで、実際のプログラム内でこれを拡張できます。

私がこれを考えるのを助けるための提案やポインタさえもいただければ幸いです。

4

2 に答える 2

9

まず、DefaultComboBoxModelのコンストラクターは配列を取ることができますが、プロパティ名が配列に存在しないため、それを行うことはできません。オブジェクトの正しいプロパティを表示するには、オブジェクトまたはコンボボックスを変更する必要があります。

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(things[]));

いくつかのオプションがあります:)

  1. 名前を返すためのすばやく簡単なtoStringのオーバーライド(Objectsがクラスであると想定)
  2. toString()メソッドでオブジェクト名を返すラッパークラス(ObjectsWrapper)を作成します
  3. モデルまたはレンダラーのいずれかでJComboBoxを何らかの方法で変更して、目的のプロパティを表示します
于 2010-10-13T18:26:45.420 に答える
1

toString()オブジェクトにを実装し.nameて、デフォルトのコンボボックスモデルでプロパティを返すだけではありませんか?

同様の質問を参照してください:Java Swing:DefaultComboBoxModelを拡張し、メソッドをオーバーライドします

于 2010-10-13T18:16:09.103 に答える