2013-06-04 2 views
0

Я выяснил, почему мой arraylist всегда возвращал размер 0, но я не могу исправить проблему. У меня есть пользовательская модель с методом addHuman (Human h), который предназначен для добавления в массив. Только проблема в том, что это не так. Теперь, если бы я использовал обычный метод, скажем, model.add (index, объект o) он действительно будет работать и увеличивать размер моего arraylist, но не отображается на моей jtable. Мой вопрос: как я могу сделать эту работу для моего пользовательского метода addHuman? Любая помощь очень ценится!Почему мои методы добавления арраистов противоречат друг другу, как я могу изменить свой метод добавления

и следующие . в основной класс, который использует этот метод, когда я нажимаю на кнопку на addIndividual, он должен добавить человека в моей HumanListModel:

addIndividual.addActionListener(new ActionListener() 
{ 

public void actionPerformed(ActionEvent event) 
{ 

    Human temp; 

    try { 

     temp = new Human();   
     modelx.addHuman(indexPoint, temp); 
///the addHuman method does display on jtable but doesn't increment arraylist, meaning that the size is always 0 which creates many problems///// 

        //modelx.add(indexPoint, temp); does indeed increment the arraysize but then it doesn't display the values on the jtable//// 

     indexPoint++; 



     System.out.println(modelx.size()); 
     } 
     catch (FileNotFoundException e) 
      { 
       e.printStackTrace(); 
      } 
    newbiex.revalidate(); ////is the jtable//// 
       } 
    }); 

вот мой заказ HumanListModel:

public class HumanListModel extends DefaultListModel implements TableModel 
{ 

    private ArrayList<Human> data; 

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

public void addHuman(int k, Human h) 
{ 
    data.add(k, h); 
    fireIntervalAdded(this, data.size(), data.size()); 

} 

    public Human getHuman(int o) 
    { 
     return data.get(o); 
    } 

    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) { 
} 

@Override 
public boolean isCellEditable(int arg0, int arg1) { 
    return false; 
} 

public void removeTableModelListener(TableModelListener arg0) { 
    } 


public void setValueAt(Object arg0, int arg1, int arg2) { 
} 

} 

ответ

0

Вы должны стрелять модель изменяется при изменении данных, лежащих в основе

public void addHuman(Human h) 
{ 
    data.add(h); 
    fireIntervalAdded(this, data.size(), data.size()); 
} 

Подобные методы с подобными событиями необходимо вызывая каждый раз, когда вы измените исходные данные, чтобы сообщить список, что он должен обновить изображение на экране ,

Например, removeHuman() потребуется аналогичный вызов. Обратитесь к javadoc по адресу http://docs.oracle.com/javase/6/docs/api/javax/swing/AbstractListModel.html для методов, которые это делают. (В этом примере fireIntervalRemoved(), и событие должно содержать индекс строки, удаленной.)

Вам также понадобится метод getElementAt(), который возвращает элемент данных для этой строки. В вашем случае верните Human в эту строку, но для этого потребуется метод toString(). В качестве альтернативы вы можете форматировать строку из Human и вернуть ее.

Примечание - предыдущая версия этого ответа была основана на моем замешательстве, считая, что это TableModel, а не ListModel. Это исправлено.

+0

где я могу добавить это? И как я могу заставить мой метод addHuman работать? :( – Iron

+0

И addTableModelListener() и removeTableModelListener() не следует переопределять пустыми методами –

+0

Я не уверен, что добавить в эти методы, я еще не получил их:/ – Iron

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