![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
Проблема такая:
Кликаем по заголовку таблицы и получем сортировку по данному полу.... Написала-работает: Только я не использобала возможности MVC??? Как сделать ето более проф-но?
package playerstable; import javax.swing.table.*; import javax.swing.event.TableModelListener; import java.util.*; import java.util.Comparator; import java.io.*; import javax.swing.event.TableModelEvent; public class MyTableModel implements TableModel{ private ArrayList list; private BufferedReader read; private Class[] callClass=new Class[]{String.class, String.class, String.class, Integer.class}; public MyTableModel(String path){ list=new ArrayList(); createInputStream(path); fillList(); } public int getRowCount() { return list.size(); } public int getColumnCount() { return 4; } public String getColumnName(int columnIndex) { switch ( columnIndex){ case 0: return "Name Player"; case 1: return "Sport Club"; case 2: return "Sex"; case 3: return "Age"; } return null; } public Class getColumnClass(int columnIndex) { return callClass[columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public Object getValueAt(int rowIndex, int columnIndex) { Player p=(Player)list.get(rowIndex); switch (columnIndex){ case 0: return p.getName(); case 1: return p.getClub(); case 2: return p.getSex(); case 3: return p.getAge(); } return null; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { } public void addTableModelListener(TableModelListener l) { } public void removeTableModelListener(TableModelListener l) { } private void createInputStream (String path){ try { read = new BufferedReader(new InputStreamReader(new FileInputStream( path))); } catch(IOException e){ e.printStackTrace(); } } private void fillList() { String line; try{ line = read.readLine(); while (line != null) { StringTokenizer tokens = new StringTokenizer(line, "|"); Player tmp = new Player(tokens.nextToken(), tokens.nextToken(), tokens.nextToken(), Integer.valueOf(tokens.nextToken())); list.add(tmp); line = read.readLine(); } } catch(IOException e){ e.printStackTrace(); } } public void sortList(Comparator cmp) { if(list!=null&&cmp!=null){ Collections.sort(list, cmp); } } public Comparator getComparator(int row) { switch(row){ case 0: return new NameComp(); case 1: return new ClubComp(); case 2: return new SexComp(); case 3: return new AgeComp(); } return null; } } [/code] |
|||
|
||||
| AlexeyVorotnikov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 658 Регистрация: 18.6.2007 Где: Москва Репутация: 3 Всего: 18 |
Почему бы не использовать готовый javax.swing.table.TableRowSorter?
-------------------- RTFM! Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
ну всетаки на основе моего кода?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 5 Всего: 72 |
Не закрывается BufferedReader read. Его лучше сделать логальной переменной и передавать как параметр - после загрузки файла он не нужен.
После сортировки MyTableModel нужно известить JTable что данные изменились и нужна перерисовка. Для этого MyTableModel нужно унаследовать от AbstractTableModel и после сортировки вызвать соответствующий метод fireXXX. |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: нет Всего: 0 |
спасибо за read.close()-просто забыла!
Решение: т.к. у меня сортировка выполняется на клик по заголовку-перерисовку делает сама java и поетому вызывать метод fireXXX не нужно. спасибо всем! |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |