Pregunta Zoom JPanel en Java Swing


Tengo un existente Java Swing solicitud. En el medio de la aplicación es un solo JPanel que quiero poder zoom in and out de. los JPanel tiene un número de JComponents en él (en su mayoría otros JPanels y JLabels)

también mouse la posición también tendrá que ajustarse apropiadamente, por lo que mouseevents necesidad de permanecer igual, incluso después de la JPanel ha sido ampliada. Como tal, simplemente cambiando el paint métodos de cada component no parece plausible

EDITAR:

enter image description here

De acuerdo, lo puse en funcionamiento usando MagnifierUI  class con algunas ediciones menores Sin embargo, el panel magnificado que creo tiene el error mouseevents - es decir, el panel está escalado, mouseevents no son.


18
2018-02-13 04:29


origen


Respuestas:


Esto es solo una scetch:

  • en tus JPanel hacer un seguimiento de un AffineTransform que representa el factor de escala (ver AffineTransform.scale(double,double),
  • anular el paint método de su JPanel: antes de llamar super.paint aplicar la transformación afín a su Graphics2D objeto (emitido desde el parámetro del paint método) llamando Graphics2D.setTransform(AffineTransform), llamada super.paint después
  • anular los métodos processMouseEvent, processMouseMotionEvent y processMouseWheelEvent, aplique la transformación afín a las coordenadas de su parámetro de evento de mouse (AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)), llamar respectivo super-Método después.

Espero que esto ayude.


5
2018-02-27 11:43



Pruebe SwingUtilities.convertPoint (fuente, punto, destino);


1
2018-02-27 18:28