JList有一些索引的麻烦,所以我不能删除项目

时间:2016-04-29 15:16:19

标签: java jlist

我创建了一个带有ADD和REMOVE按钮的GUI,用于将项目保存到JList。添加按钮工作完美,但当我想删除一些我偶然遇到问题。我的删除按钮就像这样工作,当我按下它时,我得到我已标记的选定索引并删除索引处的项目。我的问题是,当我按下我要删除的项目,然后点击REMOVE它不会保存索引,它只返回-1,告诉我没有标记索引。我是如何解决这个问题的?

 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);
    }
} 

2 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:0)

所以我确实找到了一个解决方案,我不知道它是否是最好的,但它确实有效。 如果有人发现任何更好的东西,只需发布​​它。

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

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


        }

    };
    productList.addListSelectionListener(listSelectionListener);

}