JList有索引的一些麻烦,所以我不能删除项目
问题描述:
我创建了一个带有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);
}
}
答
你确定你的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));
}
}
答
所以我找到了解决方案,我不知道它是否是最好的,但它工作。 如果有人发现任何事情会更好,只需发布它。
我所做的是我使用的是listselectionlistener,当一个项目被按下时,它将索引保存到一个全局变量中,我的REMOVE按钮从中读取值。
private void indexListener() {
ListSelectionListener listSelectionListener = new ListSelectionListener() {
public void valueChanged(ListSelectionEvent listSelectionEvent) {
productList.getModel();
selectedIndex = listSelectionEvent.getFirstIndex();
}
};
productList.addListSelectionListener(listSelectionListener);
}
我很确定它是正确的。如果我举例删除索引0“listModel.remove(0);”第一项当按下按钮时,它完美地工作。所以我敢肯定,索引是不是保存时,点击REMOVE按钮,我不能找出一种方法来解决这个 – user3611818
尝试附加列表选择监听器,并添加一些调试日志记录(打印选定的索引等),检查选择模式设置正确。 – kalvatn