0

私はJavaが初めてで、このような問題が発生しました。私はデスクトップ アプリケーションを持っています。JFrame には 2 つの jComboBox があります。この jComboBox の 1 つは Personel テーブルから Personels を保持し、もう 1 つは Personel のタイトルを取得します。シンプルですが、選択したインデックスが変更されると、タイトルでいっぱいになりますが、Ljava.lang.object.xxxxx... のようなものが表示されます。

エラー http://img243.yukle.tc/images/7070error.jpg

これが私のコードです。

  if (jComboBox1.getSelectedItem() !=null) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("SwingDenemePU");
    EntityManager em = emf.createEntityManager();
    Query sorgu = em.createQuery("from Personel p,Unvan u where  p.unvanID = u.unvanID and u.unvanID=:id");

int id = ((Unvan)jComboBox1.getSelectedItem()).getUnvanID();

   sorgu.setParameter("id", id);

   personelList = sorgu.getResultList();

    Object[] items = new Object[personelList.size()];

    for (int i = 0; i < personelList.size(); i++) {
items[i] = personelList.get(i);
    }
    DefaultComboBoxModel def = new DefaultComboBoxModel(items);
    jComboBox2.setModel(def);

items[i] = personelList.get(i) を ; に変更した場合

            Personel personel = personelList.get(i);
        items[i]=personel.getPersonelAdSoyad();

スレッド「AWT-EventQueue-0」で例外が発生しています java.lang.ClassCastException: [Ljava.lang.Object; DBClasses.Personel エラーにキャストできません。

4

2 に答える 2

1

デフォルトのコンボボックスレンダラーは、モデルに含まれるオブジェクトのtoString()メソッドを呼び出すだけです。したがって、モデルに文字列を追加すると、文字列の値が表示されます。これは、toStringメソッドが返すものだからです。

モデルに個人オブジェクトを保存する場合は、次の2つの選択肢があります。

a)toString()メソッドをPersonelクラスに追加します。b)Personelクラスのプロパティを表示するカスタムレンダラーを作成します。

JComboBox APIを読むと、カスタムレンダラーの例を提供する「コンボボックスの使用方法」に関するSwingチュートリアルへのリンクがあります。

于 2009-07-05T22:30:57.060 に答える
1

クエリが正しくないように見えます。マッピングが何であるかはわかりませんが、次のようなものを試してください。

    Query sorgu = em.createQuery("select p from Personel p,Unvan u where p.unvanID = u.unvanID and u.unvanID=:id");

また

    Query sorgu = em.createQuery("from Personel p where p.unvanID=:id");
于 2009-07-05T22:48:12.330 に答える