Bonjour,
J'ai un petit problème avec Swing, et après quelques recherches infructueuses je me tourne vers vous, mon dernier espoir
Voilà, je suis en train d'essayer de faire un outil de sélection un peu général pour Swing, que je pourrais intégrer à n'importe quel JPanel, et qui me permettrait donc de sélectionner n'importe quel composant à l'intérieur de ce panel. En gros ça fonctionnerait de la même manière que l'outil de sélection sur le bureau de Windows : avec un clique sur un composant on le sélectionne, avec un "drag" de la souris on peut en sélectionner plusieurs, etc.
Je pense que j'ai fais le gros du travail, mais il me reste un petit problème : dessiner le petit rectangle de sélection quand on "drag" la souris, et les rectangles autour des composants sélectionnés. Puisque mon code doit être un peu générique, je ne peux pas redéfinir la méthode paintComponent des panels auquels j'applique mon outil...
Pour le moment ce que je fais ressemble à ça :
C'est-à-dire que dans ma classe "SelectionTool" j'ai cette méthode que j'appelle plus ou moins à chaque fois que j'effectue une action avec ma souris. Si je suis en train de "dragger" ma souris je dessine le rectangle de sélection, si un composant est sélectionné, je dessine aussi un rectangle autour de lui. J'ai conscience que je ne suis pas sensé dessiner quoi que ce soit dans mon panel en dehors de sa méthode paintComponent(), mais je ne vois pas du tout comment faire autrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 private void paintSelectionStuff() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { panel.paintImmediately(panel.getBounds()); Graphics g = panel.getGraphics(); drawRectanglesOnGraphics(g); }); }
Sous cette forme, l'outil fonctionne, m'affiche bien les rectangles, mais j'ai une espèce de clipping qui fait que mes rectangles apparaissent et disparaissent sans arrêt, c'est assez moche. Je sens bien que ça se produit parce que je ne fais pas les choses comme il faut...
Bref si quelqu'un a des suggestions, elles seraient les bienvenues !
Merci
Partager