1

JComponentの周囲、特にJTextField(SwingX apiを使用しているのでJXTextField)の周囲にシャドウ効果を作成したいと思います。

SwingXのクラスについてはすでに知っていDropShadowBorderますが、それは私が達成したいことではありません。角丸長方形とグラデーションを使って自分でやることにしました。

私のアイデアは、丸みを帯びた長方形を作成し、それにグラデーションを適用してから、指定されたオフセットでこの長方形の上にコンポーネントを描画して、シャドウ効果を作成することです。

問題は、グラデーションの開始点と終了点を指定できるGradientPaintクラスしか認識していないことです。私が間違っていない限り、このようなグラデーションのような効果を達成することはできないと思います。中央から始まり、端に向かってフェードするグラデーションが必要になると思います。実際のAPIでこのようなグラデーションを作成する方法はありますか、それとも自分で作成する必要がありますか?

ありがとう。

編集:次のようなテキストフィールドを実行することです:ここに画像の説明を入力してください

影は、右側と左側よりも下部の方が重要です。

4

2 に答える 2

2

あなたが望むものを正確に達成する簡単な方法はありません。

このような影の正確な効果を作成するには、いくつかのことを行う必要があります。

  1. コンポーネントに合わせたサイズの別の画像に黒/灰色(影の色)の丸みを帯びた長方形をペイントし、側面にいくつかの追加の間隔を追加します
  2. その画像をぼかして、平らな角の丸い長方形から影を作成します
  3. 独自のUIを使用するか、フィールドのpaintComponentメソッドを置き換えるだけで、フィールドの下にその画像をレンダリングします

各ステップについてもう少し説明します。

  1. 背景/コンポーネントが影と一緒にぼやけないように、別の画像が必要です。さらに、グラフィックに直接フィルターを適用することはできません。画像が必要です。
  2. ここでハウツーブラーの良い説明を読むことができます:http ://www.jhlabs.com/ip/blurring.html
  3. コンポーネント自体の前にシャドウイメージを配置(ペイント)する必要があります。これは、フィールドを含むパネル/コンテナにペイントするか、フィールドのpaintComponentメソッドまたはUI自体を置き換えるという2つの方法で可能です。
于 2012-09-06T09:23:04.067 に答える
1

放射状グラデーションが必要な場合は、RadialGradientPaintがあります。

http://docs.oracle.com/javase/6/docs/api/java/awt/RadialGradientPaint.html

(ここで中心点と半径を指定します)

ところで、DropShadowBorderの何が問題になっていますか?(それはあなたが望むものと非常に似ており、いつでもソースコードを取得して変更することができます)

于 2012-09-06T08:57:36.937 に答える