定义了一个容器(一个像list的容器),初始的时候是先将容器添加到了面板上,然后将数据加进面板,另外还用了一种方法是先将数据加进容器中,然后一次性将容器加到面板上。这两种方法使用的时间差不多。我尝试过分开加数据的方法,但是当数据集定义为全局变量时,后面加入的数据会覆盖掉前面的数据,如果使用局部变量,在初始化时会新增一个面板,即后面加的数据被添加到了另外的面板上面。
求高手帮助如何提升这个容器添加的性能。
可不可以用多线程,使用多线程会不会出现后面数据覆盖掉前面的数据。

解决方案 »

  1.   

    if (m_groupList.nodesSize() == 0) return;
    else if (m_groupList.nodesSize() > 1) {
            if (!m_prepared) { 
              add(m_split = new GuiSplit(lz, m_groupList, m_edit, m_splitPercent, true));
            }
            m_groupList.setSelected(m_groupList.getNode(0));         
         }else {
                loadEditList(m_groupList.getNode(0).obj);
                add(m_edit);            
            }
            m_groupList.setImage( 1,  "mandatorygroup","c_CD_Mandatory Group");
            m_edit.invalidate();
            m_prepared = true;这里的m_edit就是我所定义的数据源,add调用的是Container中的add(Component comp)方法。这里是一次性加的数据,如果是换成多次加的话就是在往数据源m_edit中添加行完成的时候就执行一次add(m_edit),但是显示的结果只有最后一次添加的数据。
      

  2.   

    另外在进行多次添加的时候Container里面有一段代码 
    if (comp.parent != null) {
       comp.parent.remove(comp);
       if (index > ncomponents) {
                  throw new IllegalArgumentException("illegal component position");
       }
    }
    它执行后就会remove掉前面添加容器数据。这也是后面添加的覆盖掉前面添加的数据的源头。请问使用多线程会不会也出现被remove的情况啊。
      

  3.   

    楼主是怎么往m_edit中追加行的呢?
    如果是一个JTextArea,应该用append的。
      

  4.   

    哦。你找出原因了。使用多线程,每个线程中做的事情如果依然是这么做的,那当然还是会被remove掉的。
      

  5.   

    因为数据集里面不是单一的文本,而是还有文本框和一些选择控件。
    另外我已经发现了多次添加是错误的,因为只要实行过一次add(m_edit),就会把这个容器添加到面板上面,后面往容器中加行的时候就是直接加到面板上面去了,所以多次添加实则是无意义的。现在我想知道的是可不可以用多线程来提升数据加载的速度。