2014-08-27 109 views
0

我想以后的按钮点击列表中选中的项向上或向下移动,我使用GWT,这就是我以前做过:移动项目上下

@UiHandler("Up") 
    void UpClick(ClickEvent e) { 
    ListBox item; 
     int i=item.getSelectedIndex(); 
      if(i>0){ 
       // add duplicated item in the list 
       item.addItem(item.getItemText(i),String.valueOf(i-1)); 
       // make it the current item 
       i=i-2; 
       // delete the old occurence of this item 
       item.removeItem(i+2); 
      } 
     } 



    @UiHandler("Down") 
    void DownClick(ClickEvent e) { 
     int i=item.getSelectedIndex(); 
      if((i!=-1) && (i<item.getItemCount()-1)) { 
       item.addItem(item.getItemText(i),String.valueOf(i+1)); 
       i=i+2; 
       item.removeItem(i-2); 
      } 
     } 

后,我选择项目,点击“向上”按钮,成为我选择的项目向下移动,而不是上升(与项目至极位置变化是所选择的项目前) 前:

item1 
item2 
**item3** 
item4 

选择项目3后,我想这将是在item2位置和item2下降(位置变化)

,如:

item1 
**item3** 
item2 
item4 

与“向下”按钮是一样的,所选择的项目转到列表的末尾,而不是仅仅改变位置下来是选定项目后,该项目。

有人可以告诉我我在做什么错吗?

回答

1

您似乎对方法addItem(String, String)所做的事感到困惑。

documentation(Emphasis地雷):将项目添加到列表框中,为该项目指定初始值

正如你所看到的,第二个参数是而不是指定了要添加项目的索引。但是,insertItem(String, int)方法确实指定了一个索引。你可能会想要使用它:

@UiHandler("Up") 
void UpClick(ClickEvent e) { 
    ListBox item; 
    int i=item.getSelectedIndex(); 
    if(i>0){ 
     // add duplicated item in the list 
     item.insertItem(item.getItemText(i),i-1); 

     // delete the old occurence of this item 
     item.removeItem(i+1); 
    } 
} 


@UiHandler("Down") 
void DownClick(ClickEvent e) { 
    int i=item.getSelectedIndex(); 
    if((i!=-1) && (i<item.getItemCount()-1)) { 
     item.insertItem(item.getItemText(i),i+2); 

     item.removeItem(i); 
    } 
} 

我也冒昧修复你的指数数学。

+0

谢谢glad3dr – Kaly 2014-08-27 15:47:03