Suppression d'éléments de la JList
J'ai une simple Jlist avec les données de List<String>
, Maintenant, je veux supprimer l'élément sélectionné de Jlist.
Voici le code:
final DefaultListModel<String> model = new DefaultListModel();
final JList list = new JList(model);
//filling list
//loop for every element from List<String>
public static void sample(DefaultListModel model, List<String> data)
for(int i=;i<data.size();i++)
{model.addElement(data.get(i));}
//btn pressed
public void actionPerformed(ActionEvent arg0) {
int index = list.getSelectedIndex();
model.removeElementAt(index);
}
J'obtiens cette erreur:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at javax.swing.JList.fireSelectionValueChanged(Unknown Source)
at javax.swing.JList$ListSelectionHandler.valueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.fireValueChanged(Unknown Source)
at javax.swing.DefaultListSelectionModel.removeIndexInterval(Unknown Source)
at javax.swing.plaf.basic.BasicListUI$Handler.intervalRemoved(Unknown Source)
at javax.swing.AbstractListModel.fireIntervalRemoved(Unknown Source)
at javax.swing.DefaultListModel.remove(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Est la toute astuce ou quelque chose?
Merci pour l'aide.
getSelectedIndex() retourne -1 si rien n'est sélectionné, et seulement des indices de 0 ou plus sont plus valables...
- Je vérifier la valeur de l'indice et qu'il est correct!
La stacktrace n'a pas l'air du tout liées à votre le code que vous avez posté.
Quand je veux effacer ou supprimer n'importe quel élément de la liste, j'obtiens cette stacktrace.
Comment êtes-vous de définir les données sur la JList? Vous n'avez pas montré que, dans votre extrait de code. Je soupçonne que vous remplissez la JList ailleurs ce qui peut être à l'origine d'un nouveau modèle sous-jacent à être créée, rendant ainsi votre variable "modèle" inutile.
- Je vérifier la valeur de l'indice et qu'il est correct!
La stacktrace n'a pas l'air du tout liées à votre le code que vous avez posté.
Quand je veux effacer ou supprimer n'importe quel élément de la liste, j'obtiens cette stacktrace.
Comment êtes-vous de définir les données sur la JList? Vous n'avez pas montré que, dans votre extrait de code. Je soupçonne que vous remplissez la JList ailleurs ce qui peut être à l'origine d'un nouveau modèle sous-jacent à être créée, rendant ainsi votre variable "modèle" inutile.
OriginalL'auteur Mitja Rogl | 2012-11-08
Vous devez vous connecter pour publier un commentaire.
En supposant que votre index est non-négative (comme mentionné par d'autres), voir si cela fonctionne (dans votre auditeur):
Si oui, alors vous êtes en utilisant l'aide d'un modèle obsolète.
OriginalL'auteur splungebob
Selon la Javadoc de
getSelectedIndex()
:La raison pour laquelle vous rencontrez l'erreur est parce que, pour une raison quelconque, aucun élément n'est sélectionné à partir de votre liste et, comme telle, -1 est retourné par cette méthode. Lorsque vous appelez
removeElementAt()
et de le transmettre -1 comme valeur d'un paramètre, il vous jeter à l'exception.Ce que vous devez faire est comme suit:
Je ne pense pas que c'est là que l'exception se produit. S'il vous plaît: 1. Post le plein de trace de pile et 2. Poste ton code complet ou un SSCCE la version de votre code
J'ai mis à jour le code
OriginalL'auteur Sujay
Selon la javadoc, à l'aide de
remove()
au lieu deremoveElementAt()
est recommandé, afin :OriginalL'auteur flawyte
La question est que vous avez un problème chez l'auditeur, parce que lorsque l'élément est supprimé de la valeur sélectionnée va changer. C'est la raison pour laquelle votre "valueChanged" la méthode est d'essayer d'obtenir le selectedValue dans une mauvaise position.
Je ne peux pas voir votre méthode valueChanged, mais je pense que c'est la raison.
OriginalL'auteur user2685465
si vous voulez supprimer tous les éléments
OriginalL'auteur Shinwar ismail