ОБСУЖДЕНИЕ

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

1 ответов 5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

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