1

スイングでフェードイン/フェードアウトアニメーションを実装しようとしています。コンポーネントを含まない JPanel を使用しています。paintComponent() メソッドで完全に描画されます。

この JPanel の一部で、フェードイン/フェードアウトのアニメーションを実装したいと思います。AlphaComposite を使ってみたところ、JPanel 全体でアニメーションが起動しています。

このアニメーションをそのパネルの小さなクリップ領域に制限できますか?

Graphics2D g2d = (Graphics2D) g;
    g2d.setComposite(AlphaComposite.getInstance(
            AlphaComposite.XOR, alpha));
4

3 に答える 3

1

フェードイン/フェードアウトに Graphics オブジェクト (四角形、円など) を使用してみましたか? そうすれば、パネル全体に対してトリガーされません。

幸運を!

于 2012-05-03T13:55:21.380 に答える
1

おそらく、しかしそれは価値があるものよりも達成するのが難しいかもしれません. JComponentアニメート (またはフェード) したいサイズの を作成し、それを に追加してJPanel、アニメーション中に大きな の代わりに小さなコンポーネントで repaint() を呼び出しますJPanel

于 2012-05-03T14:05:07.260 に答える
1

ペイントする前に setClip() を使用して、フェード領域を制限できます。小さなフェード長方形が必要だとします。Area クラスを使用して 2 つの Shape を作成します。元のクリップとフェード四角形の交差と減算 (元のクリップからフェード四角形を減算します)。

2 つの異なるクリップで super.paintComponent() を 2 回呼び出します。2 番目のペイントでは、アルファ フィルターを設定できます。

于 2012-05-04T05:41:35.283 に答える