Увеличить 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
нет.
Ответы
Ответ 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(источник, точка, пункт назначения);