Подтвердить что ты не робот

Увеличить JPanel в Java Swing

У меня есть существующее приложение Java Swing. В середине приложения находится один JPanel, который я хочу иметь zoom in and out. JPanel имеет на нем число JComponents (в основном другие JPanels и JLabels).

Также необходимо правильно отрегулировать позицию mouse, поэтому mouseevents должен оставаться таким же, даже после того, как JPanel был увеличен. Таким образом, простое изменение методов paint для каждого component не представляется правдоподобным.

EDIT:

enter image description here

ОК, я получил работу с помощью MagnifierUI class с некоторыми незначительными изменениями. Однако увеличенная панель, которую я создаю, имеет неправильное значение mouseevents - то есть панель масштабируется, mouseevents нет.

4b9b3361

Ответ 1

Это просто эскиз:

  • в JPanel отслеживать AffineTransform, который представляет масштабный коэффициент (см. AffineTransform.scale(double,double),
  • переопределите метод paint вашего JPanel: перед вызовом super.paint примените аффинное преобразование к вашему объекту Graphics2D (выбранному из параметра метода paint), вызвав Graphics2D.setTransform(AffineTransform), вызовите super.paint впоследствии
  • переопределить методы processMouseEvent, processMouseMotionEvent и processMouseWheelEvent, применить аффинное преобразование к координатам своего параметра события мыши (AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)), затем вызвать соответствующий метод super.

Надеюсь, что это поможет.

Ответ 2

Попробуйте SwingUtilities.convertPoint(источник, точка, пункт назначения);