0

データベースの列からコンボボックスを生成するときに、少し問題があります。以下は私のコードです:

protected void initComboBoxModel(final ComboBox cmp) {

    try {
        String sql = "SELECT * FROM stockinfo";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        Vector vec = new Vector();
        while (rs.next()) {
            String item = rs.getString("Parts");
            Hashtable h = new Hashtable();
            h.put("cmp", item);
            vec.addElement(h);
            cmp.setModel(new DefaultListModel(vec));
        }

    } catch (Exception ex) {
        Dialog.show("Error", "initComboBoxModel count not populate the combo box.", "OK", null);
    }
    }

コンボボックスに入力されますが、コンボボックスの各オプションに不要なテキストがあります。次に例を示します。

「こんにちは」と言うべきオプションは「{cmp = Hello}」と言います。これが起こらないようにするにはどうすればよいですか? コンボボックス内のすべてのアイテムに対して発生します。

前もって感謝します:)

マルコ

4

2 に答える 2

2

あなたが直面している問題はVector<HashTable>、コンボボックスにデータを入力するときに、デフォルトのレンダラーがtoString()各ハッシュテーブルからメソッドを取得するように作成していることです。

ハッシュテーブルが必要な理由はわかりませんが、それが問題であり、立ち往生しています。

私は codeNameOne に慣れていませんが、スイングJComboBoxではデフォルトでレンダラーを使用し、toString()メソッドを使用してオブジェクト データを表示します。したがって、独自のレンダラー クラスを作成して、ビューをカスタマイズできます。

アップデート

Java 1.5 以降を使用していると仮定して、コードとコメント コードを修正します。

protected void initComboBoxModel(final ComboBox cmp) {

    try {
        String sql = "SELECT * FROM stockinfo";
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        Vector<String> vec = new Vector<String>(); // use generics 
        while (rs.next()) {
            String item = rs.getString("Parts");
            vec.addElement(item);            
        }

        cmp.setModel(new DefaultListModel(vec)); // here you set the model

    } catch (Exception ex) {
        Dialog.show("Error", "initComboBoxModel count not populate the combo box.", "OK", null);
    }
 }

これで、文字列を追加するレンダラーを使用する必要がないのでtoString、この場合はメソッドで問題ありません。

于 2013-09-11T15:26:21.447 に答える