Сортировка таблицы ломает TableRowListener? - PullRequest
0 голосов
/ 30 ноября 2010

У меня есть сортируемая модель таблицы по умолчанию с ListSelectionListener, которая прослушивает двойной щелчок, а затем открывает подробное представление определенного столбца.Это работает нормально, однако, когда я сортирую столбец, слушатель больше не работает.

JTable foosTable = new JTable(model);
TableRowSorter<TableModel> fooSorter = new TableRowSorter<TableModel>(model);
foosTable.setRowSorter(fooSorter);
ListSelectionModel listMod = foosTable.getSelectionModel();
listMod.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
ListSelectionListener barListener = new ListSelectionListener(foosTable);
listMod.addListSelectionListener(barListener);

1 Ответ

1 голос
/ 30 ноября 2010

Я никогда не использовал TableRowListener, который, кажется, имеет только событие itemChanged. Я обычно придерживаюсь стандартных качелей. Добавьте слушателя мыши в таблицу, выберите местоположение события щелчка и обработайте его.

 jTable.addMouseListener(new java.awt.event.MouseAdapter() {
     public void mouseClicked(java.awt.event.MouseEvent evt) {
         Point p = new Point(evt.getX(), evt.getY());
         int col = jTable.columnAtPoint(p);
         int row = jTable.rowAtPoint(p);
         if (evt.getButton() == MouseEvent.BUTTON1)
         {
            if (evt.getClickCount() >= 2)
            {
               ...
               ...
            }
        });

Редактировать Настройка TableRowSorter :

  TableRowSorter<YourJTableModel> sorter =
        new TableRowSorter<YourJTableModel>(yourJTableModel);
   jTable.setRowSorter(sorter);

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

Для более сложных задач сортировки / фильтрации вы можете попробовать застекленные списки .

...