プログラマが、一時的に 1 つまたは 2 つのレンダリング操作に対して小さな領域にクリップをセットし、それを後で復元したい場合、別の機構を使用する必要があります。現在使用可能な方法は、create() メソッドの 1 つを使用して Graphics オブジェクトをコピーし、 clipRect メソッドを使用して、一時的なクリップを新しい Graphics オブジェクトにセットし、それが終わったときに処理することです。元の Graphics オブジェクトは依然元のクリップを修正されずに持っており、次のレンダリングに使用することができます。
さらに、Graphics オブジェクトの他のすべての属性は問い合わせ、変更そして元の値に復元することができます。レンダリング属性としてビューされたとき、クリップ領域は部分的にしかこの設計モデルに従いません。クリップ領域を Rectangle オブジェクトとして問い合わせるためには、 getClipRect() メソッドがありますが、このメソッドは将来非矩形のクリップが提供されるとき、拡張はできません。加えて、現在のクリップ領域を問い合わせした場合でも、もっと限定されたクリップをインストールした後で、このクリップを明示的にこの値にセットする方法はありませんでした。
java.awt.Shapeが AWT に追加され、3 つの新しいメソッド:
getClip() setClip(Shape) setClip(int x, int y, int w, int h)が AWT Graphics クラスに追加されています。
そして、getClipRect() メソッドは、前述したもっと一般的な getClip() メソッドと次の新しいメソッドのために、現在推奨されていません:
getClipBounds()これは、その形に関わらず、現在のクリップ領域の境界ボックスを Rectangle として返します。このメソッドにはまた、AWT のクラスを超えて実装された最近の用語更新と一貫性がある名前が付けられています。
一時的なクリッピングを実行するために古い API の使用方法を示すサンプルコードを、次に示します:
import java.awt.*;
import java.applet.*;
public class TempClipExample extends Applet {
Image bgimg, img2;
public void paint(Graphics g) {
// Draw a background image
g.drawImage(bgimg, 0, 0, this);
// Draw the upper left 100x100 portion of another image at 10,10
Graphics g2 = g.create();
g2.clipRect(10, 10, 100, 100);
g2.drawImage(img2, 10, 10, this);
g2.dispose(); // reclaims resources more quickly
// Now continue drawing with original clip area
g.fillRect(0, 0, 10, 10);
}
}
一時的なクリッピングを実行するために新しい API の使用方法を示すサンプルコードを、次に示します:
import java.awt.*;
import java.applet.*;
public class TempClipExample extends Applet {
Image bgimg, img2;
public void paint(Graphics g) {
// Draw a background image
g.drawImage(bgimg, 0, 0, this);
// Draw the upper left 100x100 portion of another image at 10,10
Shape oldclip = g.getClip();
g.clipRect(10, 10, 100, 100);
g.drawImage(img2, 10, 10, this);
g.setClip(oldclip);
// Now continue drawing with original clip area
g.fillRect(0, 0, 10, 10);
}
}