私はJavaの無名クラスについて少し迷っています。それらについて読んだことがありますが、このクラスをどのように使用できますか:
private abstract class CustomRectangle {
protected final int width;
protected final int height;
protected final int xOffset;
protected final int yOffset;
protected final int borderSize;
public CustomRectangle(final int width, final int height, final int xOffset, final int yOffset, final int borderSize) {
this.width = width;
this.height = height;
this.xOffset = xOffset;
this.yOffset = yOffset;
this.borderSize = borderSize;
}
abstract void inBorder(final int dx, final int dy);
abstract void outBorder(final int dx, final int dy);
public void draw(Graphics2D g2d) {
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int dx = Math.min(x, width - 1 - x);
int dy = Math.min(y, height - 1 - y);
if (dx < borderSize || dy < borderSize) {
inBorder(dx, dy);
}
else {
outBorder(dx, dy);
}
g2d.drawLine(x + xOffset, y + yOffset, x + xOffset, y + yOffset);
}
}
}
}
別の方法で、次のことを同時に実行します。
- CustomRectangle を拡張して InBorder() と outBorder() をオーバーライドする
- draw() メソッドを呼び出して、新しい CustomRectangle を描画します。
これを行う簡単な方法が必要であり、CustomRectangle を描画するたびに大量のクラスを作成する必要はありません。
助けていただければ幸いです:)
ソリューションを含む編集:
new CustomRectangle(CARD_DIMENSION.width, CARD_DIMENSION.height, 0, 0, 5) {
@Override
public void inBorder(final int dx, final int dy) {
g2d.setColor(new Color(red, green, blue, 255 - Math.min(dx, dy)));
}
@Override
public void outBorder(final int dx, final int dy) {
g2d.setColor(new Color(red, green, blue, 192 - Math.min(dx, dy)));
}
}.draw(g2d);
あまりきれいに見えないかもしれませんが、私のアプリケーションの設計には非常に便利です。