static void paintOutlinedComponent( Graphics2D g, int x, int y, int width, int height,
		float focusWidth, float focusWidthFraction, float focusInnerWidth, float borderWidth, float arc,
		Paint focusColor, Paint borderColor, Paint background, boolean scrollPane )
	{
		double systemScaleFactor = UIScale.getSystemScaleFactor( g );
		if( (int) systemScaleFactor != systemScaleFactor ) {
			// paint at scale 1x to avoid clipping on right and bottom edges at 125%, 150% or 175%
			HiDPIUtils.paintAtScale1x( g, x, y, width, height,
				(g2d, x2, y2, width2, height2, scaleFactor) -> {
					paintOutlinedComponentImpl( g2d, x2, y2, width2, height2,
						(float) (focusWidth * scaleFactor), focusWidthFraction, (float) (focusInnerWidth * scaleFactor),
						(float) (borderWidth * scaleFactor), (float) (arc * scaleFactor),
						focusColor, borderColor, background, scrollPane, scaleFactor );
				} );
			return;
		}

		paintOutlinedComponentImpl( g, x, y, width, height, focusWidth, focusWidthFraction, focusInnerWidth,
			borderWidth, arc, focusColor, borderColor, background, scrollPane, systemScaleFactor );
	}
Paints an outlined component with rounded corners, consisting of following parts:
<ul>
<li>an (optional) outer border, which is usually a focus indicator
<li>an (optional) component border
<li>the (optional) component background
</ul>
<p>

Each part is painted only if the corresponding part color is not {@code null}.
The parts are painted in this order:
<ol>
<li>background
<li>focus border
<li>border
</ol>
<p>

<strong>Background</strong>:
The bounds of the filled rounded rectangle are
{@code [x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]}.
The focus border and the border may paint over the background.
<p>

<strong>Focus border</strong>:
The outside bounds of the painted focus border are {@code [x, y, width, height]}.
The thickness of the painted focus border is {@code (focusWidth * focusWidthFraction) + focusInnerWidth}.
The border may paint over the focus border if {@code focusInnerWidth > 0}.
<p>

<strong>Border</strong>:
The outside bounds of the painted border are
{@code [x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]}.
The thickness of the painted border is {@code borderWidth}.

@param g the graphics context used for painting
@param x the x coordinate of the component
@param y the y coordinate of the component
@param width the width of the component
@param height the height of the component
@param focusWidth the width of the focus border, or {@code 0}
@param focusWidthFraction specified how much of the focus border is painted (in range 0 - 1);
                          can be used for animation;
                          the painted thickness of the focus border is {@code (focusWidth * focusWidthFraction) + focusInnerWidth}
@param focusInnerWidth the inner width of the focus border, or {@code 0};
                       if a border is painted then {@code focusInnerWidth} needs to be larger
                       than {@code borderWidth} to be not hidden by the border
@param borderWidth the width of the border, or {@code 0}
@param arc the arc diameter used for the outside shape of the component border;
           the other needed arc diameters are computed from this arc diameter
@param focusColor the color of the focus border, or {@code null}
@param borderColor the color of the border, or {@code null}
@param background the background color of the component, or {@code null}

@since 2
flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java