19

既存のJava Swingアプリケーションがあります。JPanelアプリケーションの途中で、私ができるようにしたいシングルがzoom in and outあります。にはのJPanel数がありJComponentsます (主にその他JPanelsJLabels)。

またmouse、位置も適切に調整する必要があります。そのため、ズームmouseevents後も同じままにする必要があります。JPanelそのpaintため、それぞれのメソッドを単純に変更することcomponentは妥当ではないようです。

編集:

ここに画像の説明を入力

OK MagnifierUI class、いくつかのマイナーな編集を加えて、 を使用して動作するようになりました。しかし、私が作成した拡大パネルには問題があります。mouseeventsつまり、パネルは拡大縮小されていますが、そうでmouseeventsはありません。

4

2 に答える 2

5

これは単なるスケッチです:

  • スケール係数を表すAffineTransformJPanelを追跡します(「 」を参照)。AffineTransform.scale(double,double)
  • paintのメソッドをオーバーライドしますJPanel: を呼び出す前に、 を呼び出しsuper.paintてオブジェクトにアフィン変換(メソッドGraphics2Dのパラメーターからキャスト) を適用し、後で呼び出しますpaintGraphics2D.setTransform(AffineTransform)super.paint
  • processMouseEventメソッド、processMouseMotionEventおよび をオーバーライドしprocessMouseWheelEvent、マウス イベント パラメータの座標にアフィン変換を適用し ( )、後でAffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D)それぞれのメソッドを呼び出します。super

お役に立てれば。

于 2013-02-27T11:43:57.010 に答える
1

SwingUtilities.convertPoint(source, point,destination); を試してください。

于 2013-02-27T18:28:34.577 に答える