Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> listener для сортировки таблицы 
V
    Опции темы
sol78
Дата 9.8.2007, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



Проблема такая:
Кликаем по заголовку таблицы и получем сортировку по данному полу....
Написала-работает:
Только я не использобала возможности MVC???
 Как сделать ето более проф-но?

Код


import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class MyFrame extends JFrame {
    private JTable table;
    private JButton close;
    private MyTableModel model;
    public MyFrame() {
        super("Table of Players");
        setLocationRelativeTo(null);
        model = new MyTableModel("players.txt");
        initComponents();
        pack();

        
        table.getTableHeader().setDefaultRenderer(new MyHeaderRenderer());

    
    
        table.getTableHeader().addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                super.mouseMoved(e);
                MyHeaderRenderer r = (MyHeaderRenderer) table.getTableHeader().
                                     getDefaultRenderer();
                r.setPos(table.columnAtPoint(e.getPoint()));
                table.getTableHeader().repaint();

            }

        });

        table.getTableHeader().addMouseListener(new MouseAdapter() {
            public void mouseExited(MouseEvent e) {
                MyHeaderRenderer r = (MyHeaderRenderer) table.getTableHeader().
                                     getDefaultRenderer();
                r.setPos( -1);
                table.getTableHeader().repaint();

            }
            public void mouseClicked(MouseEvent e) {
                int col = table.columnAtPoint(e.getPoint());
                model.sortList(model.getComparator(col));
                
            }
        });
    }



}

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]


PM MAIL   Вверх
AlexeyVorotnikov
Дата 9.8.2007, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
sol78
Дата 9.8.2007, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



ну всетаки на основе моего кода?
PM MAIL   Вверх
math64
Дата 10.8.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 5
Всего: 72



Не закрывается BufferedReader read. Его лучше сделать логальной переменной и передавать как параметр - после загрузки файла он не нужен.
После сортировки MyTableModel нужно известить JTable что данные изменились и нужна перерисовка.
Для этого MyTableModel нужно унаследовать от AbstractTableModel и после сортировки вызвать соответствующий метод fireXXX.

PM   Вверх
sol78
Дата 12.8.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 7.7.2007

Репутация: нет
Всего: 0



спасибо за read.close()-просто забыла!
Решение:
т.к. у меня сортировка выполняется на клик по заголовку-перерисовку делает сама java
и поетому вызывать метод fireXXX не нужно.
спасибо всем!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.