我有點與Java中的匿名類輸了,我已經知道了他們,但我怎麼可以使用這個類: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);
也許它不看那個漂亮的,但它有非常方便的在我的應用程序的設計。
點2的含義並不完全清楚。您需要在哪個點繪製矩形?你真的需要創造許多不同的繪製邊界的方式嗎?您是否可以不進行數據驅動?以邊界寬度作爲參數? – 2013-04-04 15:24:04
這不是關於邊框寬度,而是關於我要處理爲不同矩形分配的每個像素的顏色(並且在內外邊界上也不同)的事實。當我構造這個匿名類時,我想立即繪製矩形。 – skiwi 2013-04-04 15:25:56
所以你不能只是構造匿名類的實例,然後調用draw? – 2013-04-04 15:47:57