点滅は、グラフィック・オブジェクトの描画の定期的な変化を表します。点滅するオブジェクトは注意を引き、オブジェクトの特定のアラーム状態を示すために使用できます。Rogue Wave JViews では、次の 3 種類の点滅がサポートしています。
  • 可視性点滅: オブジェクトが定期的に表示/非表示に切り替わります。
  • 色とペイントの点滅: オブジェクトの色またはペイントが定期的に変化します。
  • 点滅アクション: オブジェクト上で任意のプロパティーの変更が定期的に行われます。
ビューの点滅モードによって、ビュー上に点滅効果を表示するかどうかが決定されます。通常、概要では点滅効果を表示する必要がありません。したがって、このビューでは、次のコードを使用して点滅をオフにすることができます。
managerView.setBlinkingMode(IlvManagerView.BLINKING_DISABLED);

可視性点滅

すべてのグラフィック・オブジェクトでは、可視性点滅をサポートします。この場合、グラフィック・オブジェクトは定期的に表示/非表示が切り替わります。これには、以下の例のように点滅のタイミングを設定する必要があります。
graphic.setBlinkingOnPeriod(1000);
graphic.setBlinkingOffPeriod(2000);
これで、オブジェクトは 3 秒ごとに表示されるようになりました。オブジェクトは、1 秒間表示され、2 秒間非表示になります。同じ点滅タイミングを設定したすべてのオブジェクトは、同期して点滅します。点滅モードでは定期的な再描画が必要になるため、できる限り多くのオブジェクトに同じタイミングを使用することをお勧めします。そうしないと、同期していない描画操作が多過ぎるためにシステムのパフォーマンスが低下します。
「on-period」と「off-period」の両方に 0 以外の数値を指定すると、オブジェクトの点滅が開始します。可視性点滅は 1 つの描画方法なので、グラフィック・オブジェクトの表示フラグが変更されることはありません。したがって、グラフィック・オブジェクトで呼び出された isVisible() メソッドは、点滅モードが現在、オブジェクトを表示しているか非表示にしているかに関係なく、変更されないままになります。

点滅色とペイント

クラス IlvBlinkingColor は、点滅色を表します。このクラスは、パラメーターとして java.awt.Color を使用し、点滅色をサポートするためにドキュメント化される IlvGraphic オブジェクトのプロパティーの色として使用できます。点滅色は、表示色を定期的に変化させます。
java.awt.Color color = new IlvBlinkingColor(Color.green, Color.blue, 1000, 1000);
IlvLine line = new IlvLine();
line.setForeground(color);
この線オブジェクトは、1 秒ごとに緑色から青色に定期的に切り替わります。また、色またはペイントを、複数の状態が切り替わるように作成することも可能です。
Color color = new IlvBlinkingMultiColor(1000, Color.blue, Color.red, Color.green, Color.yellow);
Paint redGreen = new GradientPaint(0, 0, Color.red, 0, 100, Color.green);
Paint blueYellow = new GradientPaint(0, 0, Color.blue, 100, 0, Color.yellow);
Paint blackWhite = new GradientPaint(0, 0, Color.black, 0, 100, Color.white);
Paint paint1 = new IlvBlinkingPaint(redGreen, blueYellow, 1000, 2000);
Paint paint2 = new IlvBlinkingMultiPaint(1000, redGreen, blueYellow, blackWhite);
最初の色は、青色から、赤色、黄色、緑色へと切り替わり、最後に青色に戻ります。paint1 は、2 つの階調ペイントの間を切り替えます。つまり、1 秒間赤色と緑色、次に 2 秒間青色と黄色を保ちます。paint2 は、3 つの階調ペイント間を 1 秒ごとに切り替えます。
クラス IlvBlinkingColorIlvBlinkingMultiColorIlvBlinkingPaintIlvBlinkingMultiPaint は、Java API オブジェクトと一緒の場合にのみ使用可能です。プロパティーのセット・メソッドが java.awt.Color または java.awt.Paint を使用し、点滅色またはペイントをサポートするためにドキュメント化される場合に、これらのクラスは動作します。これらのクラスを JComponentJPanel などの他のオブジェクトの色として使用する場合は、点滅効果は設定されません。
メモ
点滅では定期的な再描画が必要になるため、できる限り多くの点滅色とペイントに同じタイミングを使用することをお勧めします。そうしないと、同期していない描画操作が多過ぎるためにシステムのパフォーマンスが低下します。

独自の IlvGraphic サブクラスへの点滅機能の追加

独自の Java API のサブクラスを実装すると、このサブクラスに、グラフィック・オブジェクトの特定の部分を描画するために使用するさまざまな色またはペイントを設定することができます。これらの色とペイントが点滅をサポートできるようにするには、次のメソッドを呼び出して、これらの色とペイントを点滅リソースとして登録する必要があります。
void registerBlinkingResource(Object oldResource, Object newResource); 
色とペイントを変更するときには、セッター・メソッド、コピー・コンストラクター、ストリーム・コンストラクター内などで登録する必要があります。以下に、点滅色とペイントを正しくサポートしているクラス例を示します。
import ilog.views.internal.impl.IlvUtility2D;

/**
 * A new class.
 */
public class MyClass extends IlvGraphic
{
    // the default color is not a blinking color
    private static Color _defaultColor = Color.black;

    private Color _color = _defaultColor;
    private Paint _paint = _defaultColor;

    /**
     * The default constructor.
     */
    public MyClass()
    {
        super();
        // the default color black does not blink, hence
        // no blinking resource must be registered.
    }

    /**
     * The copy constructor.
     */
    public MyClass(MyClass source)
    {
        super(source);
        Color oldColor = _color;
        Paint oldPaint = _paint;
        _color = source._color;
        _paint = source._paint;
        registerBlinkingResource(oldColor, _color);
        registerBlinkingResource(oldPaint, _paint);

        // or alternatively
        // setColor(source.getColor());
        // setPaint(source.getPaint());
        // then omit the additional calls of registerBlinkingResource
    }

    /**
     * The input stream constructor.
     */
    public MyClass(IlvInputStream stream) throws IlvReadFileException
    {
        super(stream);
        Color oldColor = _color;
        Paint oldPaint = _paint;
        _color = stream.readColor("color");
        _paint = stream.readPaint("paint");

        registerBlinkingResource(oldColor, _color);
        registerBlinkingResource(oldPaint, _paint);

        // or alternatively
        // setColor(stream.readColor("color"));
        // setPaint(IlvUtility2D.readPaint(stream, "paint", "p"));
        // then omit the additional calls of registerBlinkingResource
    }

    /**
     * Writes the object to an IVL file.
     */
    public void write(IlvOutputStream stream)
        throws IOException
    {
        super.write(stream);
        stream.write("color", _color);
        stream.writePaint(_paint, "paint", _defaultColor);
    }

    /**
     * Sets the color.
     * As Bean Property, you can use the property editor
     * ilog.views.util.beans.editor.IlvBlinkingColorPropertyEditor
     * which supports blinking.
     */
    public void setColor(Color c)
    {
        if (c == null)
            c = _defaultColor;

        Color oldColor = _color;
        _color = c;
        registerBlinkingResource(oldColor, c);
    }

    /**
     * Returns the color.
     */
    public Color getColor()
    {
        return _color;
    }

    /**
     * Sets the color.
     * As Bean Property, you can use the property editor
     * ilog.views.util.beans.editor.IlvBlinkingPaintPropertyEditor
     * which supports blinking.
     */
    public void setPaint(Paint p)
    {
        if (p == null)
            p = _defaultColor;

        Paint oldPaint = _paint;
        _paint = p;
        registerBlinkingResource(oldPaint, c);
    }

    /**
     * Returns the paint.
     */
    public Paint getPaint()
    {
        return _paint;
    }
}

点滅アクション

可視性点滅と色の点滅は、点滅の最適化されたケースです。一般には、オブジェクトに対して定期的に実行する任意のアクションを定義できます。
IlvMarker marker = new IlvMarker();
IlvBlinkingAction action = new IlvBlinkingAction(1000,1000) {
    protected void changeState(IlvGraphic obj, boolean isOn) {
        // no applyToObject necessary because the caller does it already for us
        IlvMarker marker = (IlvMarker)obj;
        if (isOn) {
            marker.setType(IlvMarker.IlvMarkerCircle);
        } else {
            marker.setType(IlvMarker.IlvMarkerSquare);
        }
    }
};
marker.setBlinkingAction(action);
この例では、1 秒ごとにマーカーのタイプが円から正方形に定期的に変化します。クラス IlvBlinkingMultiAction を使用することで、グラフィック・オブジェクトに対して任意のステップ数を定期的に実行することも可能になります。
メモ
グラフィック・オブジェクトのバウンディング・ボックスを変更する点滅アクションは正しく動作しますが、このアクションによって効率が非常に低下します。点滅では定期的な再描画が必要になるため、できる限り多くの点滅アクションに同じタイミングを使用することをお勧めします。そうしないと、同期していない描画操作が多過ぎるためにシステムのパフォーマンスが低下します。