2010-11-30 83 views
0

我有一个可排序的ListSelectionListener默认表模型,它侦听双击并打开特定列的详细信息视图。这工作得很好,但是,当我对列进行排序时,监听器不再起作用。排序表打破了TableRowListener?

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

请问您能显示一些代码吗?谢谢。 – 2010-11-30 19:27:01

+1

我从来没有听说过TableRowListener。 – camickr 2010-11-30 19:30:54

回答

1

我从来没有使用过似乎只有itemChanged事件的TableRowListener。我通常坚持标准挥杆。将鼠标监听器添加到表中,获取单击事件的位置,然后处理它。

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 以获得正确的模型数据的视图。

对于更复杂的排序/筛选需求,您可能需要尝试glazed lists