2013-02-13 9 views
18

私は既存のJava Swingアプリケーションを持っています。アプリケーションの途中でJPanelが1つあります。zoom in and outのことができます。 JPanelの番号はJComponents(大部分はJPanelsJLabels)です。ズームJPanel in Java Swing

また、mouseの位置も適切に調整する必要があります。したがって、JPanelをズームした後でもmouseeventsを同じままにする必要があります。したがって、componentpaintメソッドを単に変更することは、そう思わないようです。

編集:私は種類のそれはいくつかのマイナーな編集とMagnifierUIclassを使用して作業しました

enter image description here

OK。しかし、私が作成した拡大パネルには、mouseeventsが間違っています。つまり、パネルの縮尺は、mouseeventsではありません。

+0

JXLayerがこれを行うことができます。例(またはJXLayerそれ自体さえ)を取得することは今問題です – MadProgrammer

+0

私は言及すべきです、私は以下の方法を試しました1)[Utils4Swing5](http://javadeveloperslife.wordpress.com/2009/07/18/zooming-スイング/)全く動作しません。 2)私はまた、JXLayerとPBTransformを使ってPeit Blokの方法を試みました - しかし、Peit Blokは地球を去ったように見え、PBTransformに必要なjarファイルを見つけることができなくなりました[http://www.java.net/node/ 700255) – sboy031

+1

* "何か提案はありますか?" *これは、ユーザーが画面の解像度を選択するか、OSの組み込み画面拡大ユーティリティに任せてください。ユーザーがそれを必要とする場合、ユーザーはどこでそれを見つけるかを知るでしょう。 –

答えて

5

これは単なるscetchです:

はスケールファクタを表し AffineTransformあなたの JPanelキープトラックで
  • AffineTransform.scale(double,double)を参照してください、
  • オーバーライドあなたJPanelpaint方法:super.paintを呼び出す前に、アフィンを適用(paintメソッドのパラメータからキャスト)Graphics2Dオブジェクトに変換するには、super.paintを呼び出してから
  • メソッドprocessMouseEventprocessMouseMotionEventおよびprocessMouseWheelEventをオーバーライドし、マウスイベントパラメータ(AffineTransform.transform(java.awt.geom.Point2D,java.awt.geom.Point2D))の座標にアファイン変換を適用した後、それぞれsuper-methodを呼び出します。

これが役に立ちます。

1

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

関連する問題