auto resizing java
Zoom JPanel en Java Swing (2)
Esto es sólo un scetch:
- en su
JPanel
un seguimiento de un AffineTransform que represente el factor de escala (consulteAffineTransform.scale(double,double)
, - anule el método de
paint
de suJPanel
: antes de llamar asuper.paint
aplique la transformación afín a su objetoGraphics2D
(emitido desde el parámetro del método depaint
) llamando aGraphics2D.setTransform(AffineTransform)
, luego llame asuper.paint
- anular los métodos
processMouseEvent
,processMouseMotionEvent
yprocessMouseWheelEvent
, aplicar la transformación afín a las coordenadas de su parámetro de evento de ratón (AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)
), llamar respectivosuper
método después .
Espero que esto ayude.
Tengo una aplicación Java Swing
existente. En el medio de la aplicación hay un único JPanel
que quiero poder JPanel
y JPanel
. El JPanel
tiene una cantidad de JComponents
en él (en su mayoría otros JPanels
y JLabels
).
Asimismo, la posición del mouse
también deberá ajustarse adecuadamente, por lo que los mouseevents
deben permanecer igual incluso después de que el JPanel
haya sido JPanel
. Como tal, simplemente cambiar los métodos de paint
de cada component
no parece plausible.
EDITAR:
De acuerdo, lo tengo funcionando usando la class
MagnifierUI
con algunas ediciones menores. Sin embargo, el panel ampliado que creo tiene los mouseevents
incorrectos, es decir, el panel está escalado, los mouseevents
no.
Pruebe SwingUtilities.convertPoint (fuente, punto, destino);