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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 liste.addListSelectionListener(this::listeValueChanged); setVisible(true);
Bonus, pour mieux placer le dialogue, utiliser les coordonnées de la souris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Partager