Salut,

Je fais une petite application swing qui possède un icon tray.
Je cherche à reproduire le comportement que l'on voit sur pas mal de programmes qui en ont, c'est à dire :
- dés qu'on le réduit, la fenêtre disparaît.
- si on double clique sur l'icon tray, la fenêtre apparaît ou disparaît.

Pour arriver à faire ceci, j'ai mis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
	public void windowDeiconified(WindowEvent e) 	{ 
		toFront();
	}
 
	public void windowIconified(WindowEvent e) { 
		setVisible(false);
	}
Puis dans mon événement de double clique sur l'icon tray, j'ai ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
	if (JFrame.ICONIFIED == getExtendedState()) {
	       	if(!isVisible())
	       		setVisible(true);
		setExtendedState(m_OldState);
	}
	else {
	       	m_OldState = getExtendedState();
	       	setExtendedState(JFrame.ICONIFIED);
	}
Ça marche exactement comme je le veux sur windows. Cependant sur linux (enfin sur Ubuntu exactement), j'ai des comportements assez surprenant.
Lorsque la fenêtre disparaît, le premier double clique sur l'icon tray va faire réapparaître la fenêtre mais la laissera minimiser (et encore des fois, il ne se passe rien ). Le second double clique ramènera la fenêtre au premier plan et en état JFrame.NORMAL (ou l'état dans lequel elle était avant).

Il m'a semblé que la setExtendedState(m_OldState) n'était pas pris en compte. J'ai fait des vérifications m_OldState est toujours égale à JFrame.NORMAL. Pour corriger le problème, j'ai rajouté ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
while (ClientFrame.This().getExtendedState() != m_OldState)
    ClientFrame.This().setExtendedState(m_OldState); // Oui c'est pas bô...
Même si c'est du rafistolage, ça fait bien mieux marcher le mécanisme mais... Ce n'est toujours pas ça : j'ai toujours des cas où la fenêtre redevient visible mais en état iconifié.

Donc là je comprends vraiment pas pourquoi il se comporte de cette façon... Est-ce que quelqu'un pourrait m'éclairer ?

Merci ^^