Bonjour,
je souhaite faire en sorte que l'utilisateur puisse vérouiller et dévérouiller une JInternalFrame. J'entends par vérouiller, ne plus pouvoir l'iconifier, changer la taille, la fermer et ne plus pouvoir la déplacer et ce de façon réversible.
Pour cela j'ai mis un JButton, lorsque le JButtone est cliqué, j'appelle setClosable(boolean c) et consoeur avec l'argument ad-hoc.
Le seul probleme est de ne plus pouvoir la deplacer.
J'ai un peu fouiller sur le forum et j'ai trouvé quelques suggestions dont j me suis inspiré : faire une classe fille de JInternalFrame et redéfinir setLocation().
Je dis tout de suite que ça ne fonctionne pas du tout. En effet lorsque le composant est redessiné ce n'est pas setLocation qui est appelé, mais setBounds(int x, int y, int width, int height), que j'ai surchargée ainsi :
Et ça ne marche pas trop mal. sauf que c'est moche Voila ce que j'obtiens quand j'essaie quand meme de deplacer la fenetre lentement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void setBounds(int x, int y, int width, int height){ if (isLock){ // rester bien sage } else { super.setBounds(x,y,width,height); //faire comme d'habitude } }
ou rapidement:
A noter que les trainées disparaissent lorsque une autre fenetre passe dessus.
J'ai alors essayé pour voir de redéfinir exactement de la meme manière paintComponent(Graphics g), avec le risque que lorsque la fenetre est bloquée elle ne se redessine pas bien. a ma grande surprise la fenetre se redessine tres bien lorsq'elle est bloquée( enfin avec ce qu'il y a dedans c'est a dire pas grand chose reste à voir avec des trucs plus complexes... pas certain que ce soit le top) mais j'ai du coup une fenetre fantome qui se deplace lorsque j'essaie de deplacer la fenetre bloquée :
Pas propre du tout non plusmeme si la fenetre fantome disparait elle aussi des qu'on deplace la troisieme fenetre (celle qui n'est pas bloquée).
Du coup je pense qu'il faudrait intervenir plus en amont, au niveau de l'ecoute des evenements de la souris, pour appliquer le meme principe. Mais où ? J'avais dans l'idée que pour cela JInternalFrame ou une des classes meres implementait l'une des interfaces MouseListener ou MouseMotionListener, mais ce n'est pas le cas.
Ma question est donc qui dans une JInternaFrame reçoit les évènements de la souris pour déplacer la JInternalFrame ?
merci pour votre aide.
Bon code,
kerinel
Partager