如何为自定义模型arraylist创建自定义复制方法?

时间:2013-06-02 23:27:45

标签: java swing jtable actionlistener tablemodel

我很难理解如何为自定义模型主义者创建复制方法。我的目标是:我有一个arraylist,显示其中有多少个对象。我创建了另一个列表,用于提供临时操作。基本上,我有两张桌子。第一张桌子是我所有可用的物品。我的第二个表将包含我为该临时操作添加的对象,在这种情况下,我正在模拟匹配。模拟完成后,我可以添加或删除我想要的任何对象。由于具有自定义模型列表,我没有的是从该临时列表中删除索引的方法。我添加了以下代码并感谢您的帮助:)

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

}

}

1 个答案:

答案 0 :(得分: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界面。相反,请按照herehere概述,扩展具有事件机制的AbstractTableModel