Zoom sur Component et MouseListener
Bonjour,
Après avoir chercher à maintes reprises sur le net, Je m'en remets à vous car je n'ai plus beaucoup d'idées.
Je suis entrain d'implémenter un système de Zoom In/Out sur un JLayeredPane. Jusque là pas de souci, j'utilise la méthodes scale pour redimensionner les JComponents affichés.
Le problème situe dans le fait que ses JComponent possèdent des MouseListeners et que ces derniers ne sont pas soumis au scale.
Dans le code ci-dessous j'ai réduis la taille de mon JPANEL de moitié et pour que le MouseListener print sa trace, il est nécessaire de cliquer à droite du carré rouge ...
Auriez vous une idée pour que le MouseListener fonctionne correctement ?
D'avance Merci !
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
package lib.test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ZoomPanelTest extends JPanel
{
public static void main(String[] args)
{
JFrame frame = new JFrame("Zoom Panel");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
ZoomPanelTest chart = new ZoomPanelTest();
frame.setContentPane(chart);
frame.setSize(new Dimension(600, 600));
frame.setVisible(true);
}
public ZoomPanelTest()
{
super();
this.setLayout(new FlowLayout());
init();
}
private void init()
{
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension (100, 100));
panel.setSize(new Dimension (100, 100));
panel.setLocation(10, 10);
panel.setBackground(Color.RED);
panel.addMouseListener(new MouseAdapter()
{
public void mouseReleased(MouseEvent e)
{
System.out.println("position: "+e.getPoint());
}
});
this.add(panel);
}
protected void paintChildren(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
AffineTransform old= g2.getTransform();
double zoom = 0.5;
AffineTransform tr = AffineTransform.getScaleInstance(zoom,zoom);
g2.setTransform(tr);
super.paintChildren(g);
g2.setTransform(old);
}
} |