引用JTable中的行

时间:2015-05-31 14:53:17

标签: java hashmap jtable

JTable存储可以动态添加,删除,改组的行。在我的实现中,行代表Download,其进度可以动态更新,方法是传递一个名为id的唯一属性的值。但是,如何将id映射到实际行?

迭代列不是有效的方法。有没有办法动态地将Hashmap<ID,Object[]>JTable同步,以便给定一个键我可以更新相应的行,反之亦然?

private dftTasks=new DefaultTableModel();
public void addTask(String type, String name, int progress, int sessionID) {
    Object[] rowData={type,name,new Integer(progress),new Integer(sessionID)};      
    dftTasks.addRow(rowData);
}

public void updateProgress(int sessionID, int progress) {
    int i = dftTasks.getRow(sessionID); //<--alternative to this method
    dftTasks.setValueAt(new Integer(progress), i, 2); //2nd column=Progress
}

2 个答案:

答案 0 :(得分:1)

  1. 创建一个类来封装数据(例如typenameprogressid)。
  2. 将(1)的实例存储在List中,并在必要时存储任何其他数据结构以便快速访问(例如,由id键入的Map。此List的顺序是表的行顺序。
  3. 扩展AbstractTableModel,并根据行/列实现必要的方法以从(1)和(2)返回List的值。
  4. 当更改(2)中的实例的值(例如,更新进度)时,从(3)中的实现中调用fireXXX(DefaultTableModel的来源是如何完成此操作的一个很好的示例)

答案 1 :(得分:1)

您刚回答了自己的问题 - 使用HashMap:

 public static void ReadCallback(IAsyncResult ar)
 {
      if("<EOF>")
      {
         foreach(var h in _handlers)
         {
             Send(h,data);
         } 
      } 
 }

要反过来并听取更改,请使用TableModelListener来监听更改,