我有JList
个用户,每当选择列表中的元素时,我都会将该元素的索引存储在int中。然后,JButton
ActionListener
将侦听按“删除用户”按钮,并将删除列表中该元素的用户。问题是,一旦它最初执行此操作,ActionListener
将停止运行,因此如果我想删除另一个元素,该按钮将不再执行任何操作。如果事件处理程序已经完成了一次,我如何确保事件处理程序继续运行?这是我的参考代码:
/*
* Listener for user list selection
*/
userList.addListSelectionListener(
new ListSelectionListener () {
public void valueChanged(ListSelectionEvent e) {
delete.setEnabled(true);
index = userList.getSelectedIndex();
}
}
);
/*
* Listener for delete button press
*/
delete.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
int i = JOptionPane.showConfirmDialog(null,
"Are you sure you want to delete user " + users.get(index) + "?");
switch(i) {
case JOptionPane.YES_OPTION:
try {
Controller.deleteUser(users.get(index));
users.remove(index);
listModel.removeElementAt(index);
userList = new JList(listModel);
}
catch (UserNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
);
答案 0 :(得分:4)
问题是你是在删除处理程序中设置一个全新的userList。
快速修复:将您的列表事件处理程序添加到新JList
正确修复:重构,因此您无需在删除处理程序中执行userList = new JList(listModel);
。