Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对JTable中行的引用_Java_Hashmap_Jtable - Fatal编程技术网

Java 对JTable中行的引用

Java 对JTable中行的引用,java,hashmap,jtable,Java,Hashmap,Jtable,JTable存储可以动态添加、删除、洗牌的行。在我的实现中,行表示一个下载,通过传递名为id的唯一属性之一的值,可以动态更新其进度。但是如何将id映射到实际行 迭代列不是有效的方法。是否有任何方法可以动态地将Hashmap与JTable同步,以便给定一个键,我可以更新相应的行,反之亦然 private dftTasks=new DefaultTableModel(); public void addTask(String type, String name, int progress, int

JTable存储可以动态添加、删除、洗牌的行。在我的实现中,行表示一个
下载
,通过传递名为
id
的唯一属性之一的值,可以动态更新其进度。但是如何将
id
映射到实际行

迭代列不是有效的方法。是否有任何方法可以动态地将
Hashmap
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
}
private dftTasks=new DefaultTableModel();
public void addTask(字符串类型、字符串名称、int progress、int sessionID){
Object[]rowData={type,name,new Integer(progress),new Integer(sessionID)};
dftTasks.addRow(rowData);
}
public void updateProgress(int sessionID,int progress){
inti=dftTasks.getRow(sessionID)//
  • 创建一个类来封装数据(例如
    类型
    名称
    进度
    ,以及
    id
  • 将(1)的实例存储在
    列表
    中,如有必要,还可以存储任何其他用于快速访问的数据结构(例如由id键入的
    映射)。此
    列表
    的顺序是表的行顺序
  • 扩展
    AbstractTableModel
    ,并实现必要的方法,根据行/列从(1)和(2)返回
    列表中的值
  • 当(2)中实例的值发生变化时(例如,更新了进度),从(3)中的实现中调用fireXXX(DefaultTableModel的源代码就是一个很好的例子)

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

    private dftTasks=new DefaultTableModel();
    Hashmap<Integer,Object[]> map = new Hashmap<Integer,Object[]>();
    public void addTask(String type, String name, int progress, int sessionID) {
            Object[] rowData={type,name,new Integer(progress),new Integer(sessionID)};
            map.put(progress,rowData);      
            dftTasks.addRow(rowData);
        }
    
        public void updateProgress(int sessionID, int progress) {
            //int i = dftTasks.getRow(sessionID); //<--alternative to this method
            Object[] i = map.get(sessionID);
            dftTasks.setValueAt(new Integer(progress), i, 2); //2nd column=Progress
        }
    
    private dftTasks=new DefaultTableModel();
    Hashmap=newHashMap();
    public void addTask(字符串类型、字符串名称、int progress、int sessionID){
    Object[]rowData={type,name,new Integer(progress),new Integer(sessionID)};
    map.put(进度、行数据);
    dftTasks.addRow(rowData);
    }
    public void updateProgress(int sessionID,int progress){
    
    //int i=dftTasks.getRow(sessionID);//尝试使用并发哈希映射来存储值,至于数组,我相信有一个原子数组,并使用TableModel的自定义实现,而不是使用DefaultTableModelModern Java的[Autoboxing]()TrickaAutoboxing在基元类型和它们对应的对象包装类之间转换>,这里对象[]不是包装器..对不起,你是对的。我盲目地复制了代码的OP行,没有注意到它是错误的。现在它被修复了。