0

カスタム モデルリストのコピー メソッドを作成する方法がわかりません。私の目標はこれです: オブジェクトの数を表示する arraylist があります。一時的なアクションを提供する目的で別のリストを作成しました。基本的に、私は2つのテーブルを持っています。最初の表は、利用可能なすべてのアイテムです。2 番目のテーブルには、その一時的なアクションのために追加するオブジェクトが含まれます。この場合、一致をシミュレートしています。シミュレーションが完了したら、好きなオブジェクトを追加または削除できます。カスタム モデル リストを作成した結果として私が持っていないのは、その一時リストからインデックスを削除する方法です。次のコードを追加しました。助けてくれてありがとう:)

addPlayerMatch.addActionListener(new ActionListener()
{

    public void actionPerformed(ActionEvent event)
    {

        ArrayList<Human> testDM = new ArrayList<Human>();


        try {

            testDM.addHuman((//selected Index from first list////.getModel(//this method don't work//));


            } 
        catch (FileNotFoundException e) 
            {
                e.printStackTrace();
            }   


            }

});

これが私のデフォルトのモデルです:

public class HumanListModel extends DefaultListModel implements TableModel{

   private ArrayList<Human> data;

public HumanListModel()
{
    super();
    data = new ArrayList<Human>();
}

public void addHuman(Human h)
{
   // add new human to the model
   data.add(h);

}

public void removeHuman(Human h)
{
    data.remove(h);
}


public int getColumnCount()
{
    // the number of columns you want to display
    return 1;
}


public int getRowCount()
{
    return data.size();
}


public Object getValueAt(int row, int col)
{
    return (row < data.size()) ? data.get(row) : null;
}


public String getColumnName(int col)
{
    return "Human";

}

public Class getColumnClass(int col)
{
    return Human.class;
}

public void addTableModelListener(TableModelListener arg0) {
    // TODO Auto-generated method stub

}

@Override
public boolean isCellEditable(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void removeTableModelListener(TableModelListener arg0) {
    // TODO Auto-generated method stub

}

@Override
public void setValueAt(Object arg0, int arg1, int arg2) {
    // TODO Auto-generated method stub

}

}

4

1 に答える 1

1

にコピー コンストラクターを追加しますclass Human

private static class Human {
    public Human() {}
    public Human(Human human) {}
}

List<Human>それを使用して、バッキングのクローンを作成しますTableModel

List<Human> list = new ArrayList<Human>();
Human human = new Human();
list.add(human);
List<Human> clone = new ArrayList<Human>();
clone.add(new Human(human));

remove()行を削除するには、リクエストをList実装に転送して適切な を起動するパブリック メソッドをテーブル モデルに与えるだけTableModelEventです。

あなたがインターフェースを実装しているように見えることに少し不安を感じていTableModelます。代わりに、 hereおよびhere でAbstractTableModel概説されているように、イベント機構を備えた拡張します。

于 2013-06-03T00:44:30.453 に答える