2016-04-29 12 views
0

我创建了一个带有ADD和REMOVE按钮的GUI,以将项目保存到JList。添加按钮可以很好地工作,但是当我想删除一些我偶然发现的问题时。我的删除按钮是这样工作的,当我按下它时,我得到选定的索引,我已标记并删除索引处的项目。我的问题是,当我按下我想要删除的项目,然后点击删除它不保存索引,它只是返回-1它告诉我没有索引已被标记。任何提示我如何解决这个问题?JList有索引的一些麻烦,所以我不能删除项目

private void removeProductActionPerformed(java.awt.event.ActionEvent evt) {            
    // TODO add your handling code here: 
    productList.getModel(); 
    int selectedIndex = productList.getSelectedIndex(); 

    if(selectedIndex != -1){ 

     listModel.remove(selectedIndex); 
    } 
} 

回答

0

你确定你的JList设置正确吗?

public static void main(String[] args) { 

    DefaultListModel<String> model = new DefaultListModel<>(); 
    model.addElement("1"); 
    model.addElement("2"); 
    model.addElement("3"); 
    model.addElement("4"); 

    JList<String> test = new JList<>(model); 
    test.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 
    test.setSelectedIndex(2); 

    System.out.println("items before removal"); 
    for (int i = 0; i < model.getSize(); i++) { 
     System.out.println(model.getElementAt(i)); 
    } 

    int selectedIndex = test.getSelectedIndex(); 
    if (selectedIndex > 0) { 
     System.out.println(String.format("removing item at index %d : %s", selectedIndex, model.getElementAt(selectedIndex))); 
     model.remove(selectedIndex); 
    } 

    System.out.println("items after removal"); 
    for (int i = 0; i < model.getSize(); i++) { 
     System.out.println(model.getElementAt(i)); 
    } 
} 
+0

我很确定它是正确的。如果我举例删除索引0“listModel.remove(0);”第一项当按下按钮时,它完美地工作。所以我敢肯定,索引是不是保存时,点击REMOVE按钮,我不能找出一种方法来解决这个 – user3611818

+0

尝试附加列表选择监听器,并添加一些调试日志记录(打印选定的索引等),检查选择模式设置正确。 – kalvatn

0

所以我找到了解决方案,我不知道它是否是最好的,但它工作。 如果有人发现任何事情会更好,只需发布​​它。

我所做的是我使用的是listselectionlistener,当一个项目被按下时,它将索引保存到一个全局变量中,我的REMOVE按钮从中读取值。

private void indexListener() { 
    ListSelectionListener listSelectionListener = new ListSelectionListener() { 
     public void valueChanged(ListSelectionEvent listSelectionEvent) { 
      productList.getModel(); 
      selectedIndex = listSelectionEvent.getFirstIndex(); 


     } 

    }; 
    productList.addListSelectionListener(listSelectionListener); 

}