2013-06-02 2 views
0

У меня возникли трудности с пониманием того, как создать метод копирования для пользовательского модельера. Моя цель такова: у меня есть arraylist, который показывает, сколько объектов в нем. Я создал другой список для обслуживания временного действия. В принципе, у меня есть две таблицы. Первая таблица - все мои доступные предметы. Моя вторая таблица будет содержать объекты, которые я добавляю к ней для этого временного действия, в этом случае я имитирую совпадение. По завершении моделирования я могу либо добавить, либо удалить тот объект, который мне нужен. То, что у меня нет в результате наличия пользовательского списка моделей, - это методы удаления индекса из этого временного списка. Я добавил следующий код и спасибо за помощь :)Как создать собственный метод копирования для произвольной модели 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 

} 

}

+0

'testDM.addHuman (modelx.getModel (// * этот метод не работает * //));' Конечно, нет, 'modelx' еще не объявлен! – Runemoro

+0

OH жаль, что это было похоже на тест, который я запускал – Iron

+0

Копировать, вы имеете в виду сделать его дубликат? – Runemoro

ответ

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. Вместо этого добавьте AbstractTableModel, на котором есть оборудование для мероприятий, как указано here и here.

+0

Спасибо! Я обязательно попробую и разрешу его, попробую и вернусь к вам, чтобы посмотреть, не работает ли я :) – Iron

Смежные вопросы