【问题标题】:Sorting a table breaks the TableRowListener?对表格进行排序会破坏 TableRowListener?
【发布时间】:2010-11-30 19:11:34
【问题描述】:

我有一个带有 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);

【问题讨论】:

  • 你能显示一些代码吗?谢谢。
  • 我从未听说过 TableRowListener。
  • @camickr。好像在包 org.smir.util.table andi-smirre.ath.cx/javadoc/org.smir.util.table/org/smir/util/… 自己没用过。
  • ListSelectionListener 不会监听双击,它只是选择一行。请提出适当的问题。并且由于两次您无法使用解决问题所需的所有必要信息提出问题,因此您确实需要发布 SSCCE (sscce.org) 来演示问题,因此我们不必一直猜测您的问题实际上是在问。我们没有时间猜测您的实际意思。

标签: java swing sorting jtable listeners


【解决方案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

【讨论】:

  • 这解决了我的问题,我有一个实现 ListSelectionListener 并继承 MouseAdapter 的类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多