web-dev-qa-db-fra.com

Comment effacer une JList en Java?

j'ai une jList dans gui où je peux ajouter des données avec le bouton Ajouter. ce que je veux ajouter un autre bouton appelé Clear qui effacera tous les éléments. j'ai essayé ceci:

private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    if(evt.getSource()==jButtonClear) JList.setListData(new String[0];
    else listmodel.removeAllElements();
}

Lorsque je clique sur le bouton Ajouter, cela ajoute des éléments.

Lorsque je clique sur le bouton Effacer, cela supprime les éléments.

Mais quand je re-clique sur le bouton Ajouter, il n'y a rien dans le jList1

14
Pan24112012

Vous ne devez pas réinitialiser l'intégralité du widget JList uniquement pour en supprimer certains éléments. Au lieu de cela, vous devriez manipuler le modèle de listes, car les modifications apportées à celui-ci sont synchronisées "automatiquement" avec l'interface utilisateur. En supposant que vous utilisez bien le DefaultListModel, cela suffit pour implémenter votre fonctionnalité 'Clear All':

private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt) {
    if(evt.getSource()==jButtonClear) {
        DefaultListModel listModel = (DefaultListModel) jList1.getModel();
        listModel.removeAllElements();
    }
}
21
Perception

Il y a un certain nombre de problèmes, le premier étant que votre exemple est plein de problèmes de compilation, donc j'espère que ce n'est pas votre code réel.

JList n'a pas de méthode statique appelée setListData. Je pense que vous voulez dire jList1 au lieu.

Chaque fois que vous cliquez sur le bouton Nettoyer, vous créez un nouveau modèle et composant ...

private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
    // ??
    DefaultListModel listmodel=new DefaultListModel();
    jList1 = new JList(listmodel);
    // ??
    if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]);
    else listmodel.removeAllElements();
}

Vous avez réussi à déréférencer quoi que ce soit jList1 pointait, donc chaque fois que vous essayez d'interagir avec lui, vous n'interagissez plus avec le composant à l'écran.

L'autre problème est que vous fournissez un tableau vide à la méthode setListData, ce qui revient à dire, "veuillez ne rien ajouter à ma liste"

Essayez quelque chose comme ça;

private void jButtonClearActionPerfomed(Java.awt.event.ActionEvent evt)
{
    DefaultListModel listmodel = (DefaultListModel)jList1.getModel();
    if(evt.getSource()==jButtonClear) {
        listmodel.removeAllElements();
    } else {
        listModel.addElement(new String[]{"Hello"});
    }
}
7
MadProgrammer
DefaultListModel model=new DefaultListModel();
        model.clear();
     jList1.setModel(model);

essaye ça

2
Shinwar ismail