Bloquer les éléments d'une liste pendant un laps d e temps...
[ Nouvelle discussion
| Répondre au groupe
|
fr.comp.lang.java ]
Bonjour,
je souhaite pouvoir bloquer les éléments présents dans une
java.util.List jusqu'à que l'utilisateur clique sur un bouton par
exemple.
Par exemple, j'aimerais pouvoir écrire l'action suivante pour mon
bouton : «
JButton btnDebloquer = new JButton("Débloquer situation !");
btnDebloquer.addActionListener(new ActionListener(){@Override
public void actionPerformed(ActionEvent arg0) {
maListe.setBloquer(false);
}
}); ».
Si avant que je clique sur le bouton, on essaye d'ajouter des éléments
à ma liste, il faudrait que ces actions soient mis dans une file
d'attente jusqu'à que mon clique autorise l'accès à ma liste.
Savez-vous comment pourrais-je faire cela en java ?
J'ai essayé de me créer la classe "ArrayListPerso" : «
package listPerso;
import java.util.ArrayList;
public class ArrayListPerso<T> extends ArrayList<T> {
/** Version de sérialisation */
private static final long serialVersionUID = 1L;
/** Bloquer l'ajout d'élement ? */
private boolean bloquer = false;
/**
* Constructeur par défaut.
*/
public ArrayListPerso() {
super();
}
/**
* Retourne un boolean pour indiquer si on bloque l'ajout d'élément
* dans la liste.
*
* @return true la liste des éléments est bloqué, false on peut
modifier la liste.
*/
public boolean isBloquer() {
return bloquer;
}
/**
* Définit l'état de la liste : bloque-t-on tout ajout d'élément ou
pas ?
* @param bloquer true on bloque tout ajout d'élément, false on
autorise tout modification.
*/
public void setBloquer(boolean bloquer) {
if ((bloquer == false) && (this.bloquer == true)) {
this.bloquer = bloquer;
this.notifyAll();
} else {
this.bloquer = bloquer;
}
}
@Override
public boolean add(T arg0) {
if (bloquer) {
System.out.println("L'ajout de l'élément " + arg0 + " est
suspendu !");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Ajout de l'élément " + arg0 + " effectué !");
return super.add(arg0);
}
} »
et la classe de test : «
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
final ArrayListPerso<String> maListe = new ArrayListPerso<String>();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton btnDebloquer = new JButton("Débloquer situation !");
btnDebloquer.addActionListener(new ActionListener(){@Override
public void actionPerformed(ActionEvent arg0) {
maListe.setBloquer(false);
}
});
frame.getContentPane().add(btnDebloquer, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
maListe.add("allo");
maListe.setBloquer(true);
maListe.add("coucou");
}
».
Voici les informations affichées dans la console : «
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at listPerso.ArrayListPerso.add(ArrayListPerso.java:50)
at TestFabienListePerso.main(TestFabienListePerso.java:45)
Ajout de l'élément allo effectué !
L'ajout de l'élément coucou est suspendu !
» alors que je souhaiterais avoir : «
Ajout de l'élément allo effectué !
L'ajout de l'élément coucou est suspendu !
» puis, quand je clique sur le bouton : « Ajout de l'élément coucou
effectué ! ».
Merci d'avance pour votre aide.
F.

|
 cette fonctionnalité est reservée aux membres ayant une session active !
|