Je n'avais pas vu que tu avais déjà un setVisible(true) dans jliste. Il est fait avant l'enregistrement de l'écouteur, donc l'écouteur est enregistré trop tard (le dialogue est déjà fermé).
Enlève le setVisible(true) dans le mouseReleased :
Et inverse les deux lignes, dans le constructeur de jliste, pour le dialogue s'affiche après que l'écouteur soit affecté à la JList :Code:
1
2
3
4
5
6
7
8
9
10 JFrame parent = (JFrame) SwingUtilities.getWindowAncestor(Exemple.this); try { jliste b = new jliste(parent); String selection = b.getSelection(); System.out.println(selection); } catch (EncryptedDocumentException | InvalidFormatException | IOException e) { // TODO... e.printStackTrace(); }
Code:
1
2 liste.addListSelectionListener(this::listeValueChanged); setVisible(true);
Bonus, pour mieux placer le dialogue, utiliser les coordonnées de la souris :
Code:
1
2
3
4 Point mouse = e.getPoint(); SwingUtilities.convertPointToScreen(mouse, Exemple.this); jliste b= new jliste(parent, mouse);
En revanche, j'enlèverais cette marge de 100 pixels que tu as mises autour de la JList, c'est vraiment affreux.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public jliste(Frame owner, Point mouse) { /*...*/ pack(); Dimension dialogSize = getSize(); setLocation(mouse.x-dialogSize.width/2, mouse.y-dialogSize.height/2); // on centre sur le point du clic liste.addListSelectionListener(this::listeValueChanged); setVisible(true); }
