在处理事件后保持Java ActionListener运行?

时间:2012-04-08 01:53:35

标签: java swing jbutton actionlistener jlist

我有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();
                }

            }
        }
    }
);

1 个答案:

答案 0 :(得分:4)

问题是你是在删除处理程序中设置一个全新的userList。

快速修复:将您的列表事件处理程序添加到新JList

正确修复:重构,因此您无需在删除处理程序中执行userList = new JList(listModel);