我创建了一个带有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);
}
}
答案 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);
}