Как отсортировать данные в Jtable

Тема в разделе "Java", создана пользователем rang3r, 28 янв 2010.

Статус темы:
Закрыта.
  1. rang3r

    rang3r Гость

    Доброго времени суток всем, пишу на Java форум, при выводе сообщений в таблицу возникла такая проблема, некоторые ответы(потомки сообщения) отображаются выше чем потомки того же уровня, но которые были добавлены раньше, как решить данную проблему, хотелось бы пример с сортировкой по Дате. Вот код модели таблицы и код класса Message

    Код (Text):
    public class MessageTableModel extends AbstractTableModel
    {
    private Collection<ParentObject> messages = Manager.getObjectCol(Message.class);
    private Topic topic;
    private Collection messForTopic = getMessages(topic);
    private ArrayList<Message> messForTable;
    private HashMap mess =new HashMap();
    public void setTop(Topic top)
    {
    if (top != null)
    {
    topic = top;
    messages = Manager.getObjectCol(Message.class);
    messForTopic = getMessages(top);
    messForTable = new ArrayList<Message>();
    if (messForTopic.size() != 0)
    {
    buildHierarchicMessage(messForTopic, null, 0);
    }
    TableModelEvent tEvent = new TableModelEvent(this);
    this.fireTableChanged(tEvent);
    }
    }
    private Collection getMessages(Topic top)
    {
    Collection mess = new ArrayList();
    for (Object obj : messages)
    {
    if (top != null)
    if (((Message) obj).getTop().getId().equals(top.getId()))
    mess.add(obj);
    }
    return mess;
    }
    private void buildHierarchicMessage(Collection<Message> messages, Message parentMessage, int lvl)
    {
    for (Message message : messages)
    {
    if (Utils.areEquals(message.getParent(), parentMessage))
    {
    String str= "";
    for (int i = 0; i < lvl; i++)
    str += " ";
    messForTable.add((Message) message.clone());
    mess.put(message,lvl);
    buildHierarchicMessage(messages, message, lvl + 1);
    }
    }
    }
    private String buildTabulation(Message mes)
    {

    Integer lvl= (Integer) mess.get(mes);
    String str="";
    for(int i=0;i<lvl;i++)
    str+=" ";
    return str;
    }
    public void getFindMessage(ArrayList list)
    {
    messForTopic = list;
    TableModelEvent tEvent = new TableModelEvent(this);
    this.fireTableChanged(tEvent);
    }
    public int getRowCount()
    {
    return messForTopic.size();
    }
    public int getColumnCount()
    {
    return 4;
    }
    public Object getValueAt(int rowIndex, int columnIndex)
    {
    ArrayList<Message> message = new ArrayList<Message>();
    for (Message mes : messForTable)
    message.add(mes);
    switch (columnIndex)
    {
    case 0:
    return buildTabulation(message.get(rowIndex))+(message.get(rowIndex)).getName();
    case 1:
    if ((message.get(rowIndex)).getParent() != null)
    return (message.get(rowIndex)).getParent().getName();
    else
    return "";
    case 2:
    return message.get(rowIndex).getCreator().getLogin();
    case 3:
    return (message.get(rowIndex)).getDate();
    default:
    return message.get(rowIndex);
    }
    }
    public Message getMessage(int rowIndex)
    {
    return (Message) getValueAt(rowIndex, 4);
    }
    public String getColumnName(int column)
    {
    switch (column)
    {
    case 0:
    return "Name";
    case 1:
    return "Message Parent";
    case 2:
    return "Creator";
    case 3:
    return "Date";
    }
    return super.getColumnName(column);
    }
    public boolean isCellEditable(int rowIndex, int columnIndex)
    {
    return false;
    }
    public Class<?> getColumnClass(int columnIndex)
    {
    switch (columnIndex)
    {
    case 0:
    return String.class;
    case 1:
    return String.class;
    case 2:
    return String.class;
    case 3:
    return Date.class;
    default:
    return Object.class;
    }
    }
    public boolean deleteMessage(int[] mas, Topic top)
    {
    if (mas.length != 0)
    {
    for (Object obj : mas)
    {
    Message mes = getMessage((Integer) obj);
    deleteChild(mes.getId(), mes.getClass());
    Manager.removeObject(mes.getId(), Message.class);
    }
    setTop(top);
    return true;
    }
    return false;
    }
    private void deleteChild(Long id, Class clazz)
    {
    List<ParentObject> childs = Manager.findChildren(id, clazz);
    for (ParentObject obj : childs)
    {
    Manager.removeObject(obj.getId(), clazz);
    }
    }
    public Topic getTopic()
    {
    return topic;
    }
    public void fireTableChanged(TableModelEvent e)
    {
    super.fireTableChanged(e);
    }
    }
    public class Message extends ParentObject
    {
    private String body;
    private Message parent;//+
    private Topic top;
    private User creator;//++
    private Date date=new Date();//++
    public Message(String name, String body, User creator, ParentObject top, ParentObject parent) throws NullNameException
    {
    super(name);
    setBody(body);
    setCreator(creator);
    setTop((Topic) top);
    setParent((Message) parent);
    }
    public void setCreator(User creator)
    {
    if(creator!=null)
    this.creator=creator;
    else
    throw new IllegalArgumentException("field creator is empthy");
    }
    public User getCreator()
    {
    return creator;
    }
    public String getBody()
    {
    return body;
    }
    public void setBody(String body)
    {
    if(body!=null)
    this.body = body;
    else
    throw new IllegalArgumentException("field body is empthy");
    }
    public ParentObject getParent()
    {
    return parent;
    }
    public void setParent(Message parent)
    {
    this.parent = parent;
    }
    public Topic getTop()
    {
    return top;
    }
    public void setTop(Topic top)
    {
    if(top!=null)
    this.top = top;
    else
    {
    new JDialog(new JFrame(),"Choose topic",true); //todo
    throw new IllegalArgumentException("Choose topic for create message");
    }
    }
    public String toString()
    {
    return String.valueOf("name: " + name + " body: " + body+ " creator: "+creator.getLogin()+" id:"+ id);
    }
    public Date getDate()
    {
    return date;
    }
    }
     
  2. devunion

    devunion Member

    Регистрация:
    3 ноя 2008
    Сообщения:
    13
    Симпатии:
    0
    Вы бы уже включали весь код. Так чтобы можно было скопировать и запустить. Поглядите примеры. Может чего потеряли:
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей