-1

助けが得られることを願っています。一般的な質問として尋ねます。

を使用しJListJListいますが、 (value,text) がないため (テキストを表示して、コードで値を使用できます)。このリークのためList、オブジェクト (myList)を作成しますJList。に追加するすべてのアイテムを に追加するJListためmyList、同じインデックスに 2 つのオブジェクト (JList と mylist) に同じ情報が含まれます。JList.getselectedindex()メソッドを使用してインデックスを取得し、それを使用して情報を追加しmyListます...

問題: 値を選択すると、次の値がmyList最初の値で上書きされます!!! この問題は既知ですか?

    mod_mp = new ModelMAPPING();   objects cotain values that ot exist in  jList                                                             

    msgF.setTo(incom.userID);/////// set parter!
    if(isExCon==-1) {
        // not exist                                           
        mod_mp.to = incom.userID; // incom is object that incom from another program
        mod_mp.SetCovFile(incom.userID+".html");
        mod_mp.ConvName = incom.getBody();

        boolean added= model_list.add(mod_mp);   // add to mylist
        if(added) System.out.println(mod_mp._Hfile + " added");
        model.addElement(mod_mp.ConvName);// add to Jlist by model

        HestoryFile(Htmlhead+tohis,mod_mp._Hfile);//create _Hfile and write to it:"tohis" string.

    } else { //exist@
        // note isExcon return the index if exist else -1
        model_list.get(isExCon).ConvName=incom.getBody();
        mod_mp.SetCovFile(model_list.get(isExCon)._Hfile);
        HestoryFile(tohis, model_list.get(isExCon)._Hfile);
    }//end else

ここでファイルが存在する場合、新しいテキストを更新しJListて現在のファイルを設定します

の選択JListは次のとおりです。

msgF.setTo (model_list.get(jList2.getSelectedIndex()).to); // set that we will send To...
mod_mp.SetCovFile(model_list.get(jList2.getSelectedIndex())._Hfile);//set the file

jLabel5.setText( bringFromFile(mod_mp._Hfile));//tell the label to read that file

それは正常に動作しますが、2 つのアイテムがあるJList場合、いずれかを選択すると、もう一方が上書きされます!!!

4

1 に答える 1

2

を使用しJListJListいますが、 (value,text) がないため (テキストを表示して、コードで値を使用できます)

JListあなたの問題を理解するのは本当に難しいですが、引用された行について、モデルとJListそれ自体によって表示されるテキストとの間に誤解があると「疑っています」 。それがあなたが別のを持っている理由だと思いますList

モデルには任意のオブジェクトを含めることがJListでき、オブジェクト自体に関係なく、必要に応じてテキストを表示することもできます。この最後のタスクはListCellRendererによって行われます。カスタム セル レンダラーの作成をご覧ください。

たとえば、次のクラスを使用できます。

class Person {    
    String lastName;
    String name;

    public Person(String lastName, String name){
        this.lastName = lastName;
        this.name = name;
    }

    public String getLastName(){
        return this.lastName;
    }

    public String getName(){
        return this.name;
    }
}

JListこれで、キープPersonオブジェクトを後で操作することができます。この部分は簡単で、 を作成してListModel要素を追加するだけです。

DefaultListModel model = new DefaultListModel();
model.addElement(new Person("Lennon","John"));
model.addElement(new Person("Harrison","George"));
model.addElement(new Person("McCartney","Paul"));
model.addElement(new Person("Starr","Ringo"));

しかし、それぞれの名前と姓を表示したいとしますPersonListCellRendererこれを行うために独自に実装できます。

JList list = new JList(model);
list.setCellRenderer(new DefaultListCellRenderer(){
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if(value instanceof Person){
            Person person = (Person)value;
            setText(person.getName() + " " + person.getLastName());
        }
        return this;
    }
});

そして、あなたJListはあなたが望むようにアイテムを表示します:

ここに画像の説明を入力

于 2013-11-01T19:17:33.987 に答える