1

私に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();
                }

            }
        }
    }
);
4

1 に答える 1

4

問題は、削除ハンドラ内からまったく新しい userList を設定していることです。

簡単な修正:リスト イベント ハンドラーを新しい JList に追加する

適切な修正:userList = new JList(listModel);削除ハンドラで行う必要がないようにリファクタリングします 。

于 2012-04-08T02:04:55.277 に答える