2011-12-26 6 views
1

Java Paint JComponentsはどのように画面に表示されますか?JavaでJComponentsをペイントする方法は?

私はGraphics2Dメソッドへのすべての呼び出しを計測するAspectJを使用しています。たとえば、アプリケーションからGraphics2d.Draw(Shape)を呼び出すと、その呼び出しをキャプチャすることができます。

JavaはGraphicsクラスを使用してJComponentsをペイントしますか?JButtonsと言うことができますか?たとえば、アプリケーションにJButtonがあり、JButtonを画面にペイントするためのメソッドをグラフィックスクラスにキャプチャしたいのですか?私はこれをする方法を知らない。

アイデア?

更新: JButtonクラスとPaintComponentメソッドをオーバーライドしようとしました。これを行うと、そのJButtonを描画するために使用されたGraphicsメソッドへの呼び出しをキャプチャできます。

特定のJComponentクラスをオーバーライドせずにこれらの呼び出しをキャプチャする方法はありますか?

+0

これらの呼び出しをキャプチャするには、call()またはexecution()のジョインポイントを使用していますか? AspectJコードを提出してください。 –

+0

AspectJウィーバーは、グラフィックスの2D外部ライブラリにアクセスすることができません(外部ライブラリであるため)、ウィービングは実行されません。コードのメソッドをオーバーライドすると、AspectJはコードにアクセスして製織を実行できます。おそらくグラフィックス2Dのライブラリは、ajcコンパイラのあなたのインラインにはありません。 –

答えて

1

yourJButton.repaint(); swingによってpaint()メソッドが呼び出されます。ペイントを直接呼び出すべきではありませんが、代わりにrepaintメソッドを使用して、描画のためにコンポーネントをスケジュールする必要があります。このメソッドは、実際にペイント作業をpaintComponent、paintBorder、およびpaintChildrenという3つの保護されたメソッドに委譲します。

+0

ありがとうございましたTravis.Iあなたを理解しています。各JButtonクラスにはpaintComponentメソッドがあります。このメソッドはボタンをペイントするためにdrawLine setColorなどのGraphicsクラスからいくつかのメソッドを呼び出します。これらの呼び出しをGraphicsメソッドに取り込みたいです。新しいボタンJButtonを作成しました。myBtn = new JButton();これをパネルに貼り付け、これを画面に描画すると、Graphicsクラスメソッドの呼び出しをキャプチャします。JButtonのクラスを拡張してpaintComponentメソッドをオーバーライドすると私はpaintクラスを呼び出すことはできません。 – Gonny

関連する問題