Основываясь на решении, которое Марко13 упомянул в своем комментарии, я предложил эту пользовательскую функцию drawOval
. Он в основном переключается с drawOval
на fillOval
, когда ширина хода больше диаметра. Положение и размеры для функции fillOval
рассчитываются в соответствии с выводом drawOval
.
public static void drawOval(Graphics2D g2d, int strokeWidth, int x, int y, int width, int height) {
int minLength = Math.min(width, height);
int maxLength = Math.max(width, height);
if (minLength >= strokeWidth) {
g2d.drawOval(x, y, width, height);
} else {
int x1 = x - (strokeWidth - maxLength) / 2 - (maxLength / 2);
int y1 = y - (strokeWidth - maxLength) / 2 - (maxLength / 2);
int width1 = width + strokeWidth;
int height1 = height + strokeWidth;
g2d.fillOval(x1, y1, width1, height1);
}
}
Вот как это выглядит