[Java,Swing] attendre fermeture JFrame
Résolu/Fermé
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
-
13 sept. 2012 à 20:16
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 14 sept. 2012 à 00:43
arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 - 14 sept. 2012 à 00:43
A voir également:
- [Java,Swing] attendre fermeture JFrame
- Waptrick java football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Jeux java itel football - Télécharger - Jeux vidéo
- Jeux java itel 5360 ✓ - Forum Mobile
- Java jre - Télécharger - Langages
1 réponse
arth
Messages postés
9374
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 291
13 sept. 2012 à 22:48
13 sept. 2012 à 22:48
Si j'ai bien compris :
- Un FileChooser demande quel fichier ou veut ouvrir
- Une fois le fichier sélectionné Le FileChooser se ferme
- On créer une Frame de taille 500²
- On y ajoute un ScrollPane qui contient l'image ?
- Un clique sur un pixel de l'image
- On ferme la Frame et on démarre le traitement.
C'est ça?
- Un FileChooser demande quel fichier ou veut ouvrir
- Une fois le fichier sélectionné Le FileChooser se ferme
- On créer une Frame de taille 500²
- On y ajoute un ScrollPane qui contient l'image ?
- Un clique sur un pixel de l'image
- On ferme la Frame et on démarre le traitement.
C'est ça?
Modifié par KX le 13/09/2012 à 23:03
Le problème c'est que soit je n'ai jamais d'objet final (celui que j'affiche) soit j'obtient l'objet initial (-1,-1).
Je n'arrive pas à fermer la fenêtre après un seul clic (quand je remets les deux lignes commentées)
13 sept. 2012 à 23:18
A partir d'un composant avec MouseEvent
En enregistrant un MouseEvent auprès de votre composant graphique, vous pouvez avoir accès à la position de la souris relativement à ce composant. Il vous suffira ensuite d'utiliser la méthode getLocationOnScreen() de Component pour calculer la position de la souris par rapport à l'écran.
int x = (int)(mouseEvent.getPoint().getX() + monComposant.getLocationOnScreen().getX());
int y = (int)(mouseEvent.getPoint().getY() + monComposant.getLocationOnScreen().getY());
Vous pouvez aussi utiliser la méthode convertPointToScreen() de la classe javax.swing.SwingUtilities. Par exemple :
MouseEvent event = ...;
Component composant = ...;
Point locationComposant = event.getPoint();
Point locationEcran = SwingUtilities.convertPointToScreen(locationComposant, composant);
Tiré de : https://java.developpez.com/faq/gui?page=La-souris-et-le-clavier
Si c'était moi :
JFrame frame = new JFrame("Facebook Images");
frame.setSize(500,500);
frame.setResizable(false);
final JScrollPane scroll = new JScrollPane(new JLabel(new ImageIcon(chooser.getSelectedFile().getAbsolutePath())));
scroll.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent e)
{
int x = (int)(e.getPoint().getX() + scroll.getLocationOnScreen().getX());
int y = (int)(e.getPoint().getY() + scroll.getLocationOnScreen().getY());
dim.setSize(x,y);
frame.setVisible(false);
....
// Traitement sur l'image
....
closeProgram();
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
});
frame.add(scroll);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
.....
.....
public void closeProgram()
{
frame.dispose();
System.exit(0);
}
Après c'est en considérant je pense que l'on clique bien sur le ScrollPane et non à côté de la Frame.
13 sept. 2012 à 23:18
13 sept. 2012 à 23:45
Le soucis c'est que je ne veux pas faire "// Traitement sur l'image" à l'intérieur de mon code mouseClicked, mais bien à la suite de mon code.
J'ai donc besoin d'un mécanisme, qui permette d'attendre que la fenêtre soit fermée avant d'atteindre le code de traitement image (mon affichage de dim dans mon code)
Le problème de l'attente, je l'ai essayé avec wait et notify (à chaque fois que j'essaye de les caser ceux là, ils ne font jamais ce que je veux ^^' ) mais aussi avec des Threads, ou des Sockets. Mais c'est toujours pareil, soit mon affichage de dim est appellé avant que j'ai cliqué, soit il n'est jamais appelé...
13 sept. 2012 à 23:48
boolean status = false.
.......
.......
dim.setSize(x,y);
status=true;
.......
.......
frame.setVisible(true);
While(!status)
Thread.sleep(1000);
frame.setVisible(false);
frame = null;
}
System.out.println(dim);