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

  • Автор темы rang3r
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

rang3r

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

Код:
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;
}
}
 
03.11.2008
13
0
#2
Вы бы уже включали весь код. Так чтобы можно было скопировать и запустить. Поглядите примеры. Может чего потеряли:
 
Статус
Закрыто для дальнейших ответов.