Class FlatUIUtils
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classstatic class -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final doublestatic final doubleprivate static UIDefaultsstatic final doublestatic final doublestatic final doubleprivate static final WeakHashMap<LookAndFeel, IdentityHashMap<Object, ComponentUI>> private static boolean -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Dimensionstatic Insetsstatic Rectangleprivate static StringbuildSubKey(String key, String subKey) InsertssubKeyat last dot inkey.static booleanReturns whether the component UI for the given component can be shared with other components.static ShapecreateArrowShape(int direction, boolean chevron, float w, float h) Creates a chevron or triangle arrow shape for the given direction and size.static ShapecreateComponentRectangle(float x, float y, float w, float h, float arc) Creates a (rounded) rectangle used to paint components (border, background, etc.).static Path2DcreatePath(boolean close, double... points) Creates an open or closed path for the given points.static Path2DcreatePath(double... points) Creates a closed path for the given points.static Path2DcreateRectangle(float x, float y, float width, float height, float lineWidth) Creates a not-filled rectangle shape with the given line width.static Path2DcreateRoundRectangle(float x, float y, float width, float height, float lineWidth, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) Creates a not-filled rounded rectangle shape and allows specifying the line width and the radius of each corner.static ShapecreateRoundRectanglePath(float x, float y, float width, float height, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) Creates a filled rounded rectangle shape and allows specifying the radius of each corner.static ShapecreateRoundTrianglePath(float x1, float y1, float x2, float y2, float x3, float y3, float arc) Creates a rounded triangle shape for the given points and arc radius.static ComponentUIcreateSharedUI(Object key, Supplier<ComponentUI> newInstanceSupplier) Creates a shared component UI for the given key and the current Laf.static ColorderiveColor(Color color, Color baseColor) private static doubledistance(double x1, double y1, double x2, double y2) Calculates the distance between two points.static voiddrawShapePure(Graphics2D g, Shape shape) Draws the given shape with disabled stroke normalization.static voiddrawString(JComponent c, Graphics g, String text, int x, int y) Draws the given string at the specified location.static voiddrawStringUnderlineCharAt(JComponent c, Graphics g, String text, int underlinedIndex, int x, int y) Draws the given string at the specified location underlining the specified character.private static ContainerFind the first parent that is opaque.static booleangetBoolean(JComponent c, String systemPropertyKey, String clientPropertyKey, String uiKey, boolean defaultValue) static floatReturns the scaled arc diameter of the border for the given component.static intReturns the scaled thickness of the border.static floatReturns the scaled thickness of the outer focus border for the given component.static floatReturns the scaled line thickness used to compute the border insets.static FlatBorderstatic ColorGets the background color of the first opaque parent.static booleangetSubUIBoolean(String key, String subKey, boolean defaultValue) static ColorgetSubUIColor(String key, String subKey) static DimensiongetSubUIDimension(String key, String subKey) static FontgetSubUIFont(String key, String subKey) static IcongetSubUIIcon(String key, String subKey) static InsetsgetSubUIInsets(String key, String subKey) static intgetSubUIInt(String key, String subKey, int defaultValue) static booleangetUIBoolean(String key, boolean defaultValue) static ColorgetUIColor(String key, int defaultColorRGB) static ColorgetUIColor(String key, Color defaultColor) static ColorgetUIColor(String key, String defaultKey) static <T extends Enum<T>>
Tstatic floatgetUIFloat(String key, float defaultValue) static intstatic booleanstatic boolean(package private) static booleanstatic booleanstatic booleanstatic booleanReturns whether the given component is in a window that is in full-screen mode.(package private) static booleanisInActiveWindow(Component c, Window activeWindow) static booleanisInsetsEmpty(Insets insets) static booleanReturns whether the given component is the permanent focus owner and is in the active window or in a popup window owned by the active window.static Booleanstatic booleanReturns whether shared UI delegates are used.private static doublelerp(double v1, double v2, double t) Calculates linear interpolation between two values.static intminimumHeight(JComponent c, int minimumHeight) static intminimumWidth(JComponent c, int minimumWidth) (package private) static booleanChecks whether component is used as peer for AWT (on macOS) and whether a dark FlatLaf theme is active, which requires special handling because AWT always uses light colors.static Colorstatic FontnonUIResource(Font font) static BordernonUIResource(Border border) static voidpaintArrow(Graphics2D g, int x, int y, int width, int height, int direction, boolean chevron, int arrowSize, float arrowThickness, float xOffset, float yOffset) Paints a chevron or triangle arrow in the center of the given rectangle.static voidpaintComponentBackground(Graphics2D g, int x, int y, int width, int height, float focusWidth, float arc) Fills the background of a component with a rounded rectangle.(package private) static voidpaintFilledRectangle(Graphics g, Color color, float x, float y, float w, float h) static voidpaintGrip(Graphics g, int x, int y, int width, int height, boolean horizontal, int dotCount, int dotSize, int gap, boolean centerPrecise) static voidpaintOutline(Graphics2D g, float x, float y, float w, float h, float lineWidth, float arc) Paints an outline at the given bounds using the given line width.static voidpaintOutline(Graphics2D g, float x, float y, float w, float h, float lineWidth, float arc, float innerArc) Paints an outline at the given bounds using the given line width.static voidpaintOutlinedComponent(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) Paints an outlined component with rounded corners, consisting of following parts: an (optional) outer border, which is usually a focus indicator an (optional) component border the (optional) component background(package private) static voidpaintOutlinedComponent(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) private static voidpaintOutlinedComponentImpl(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 scaleFactor) static voidFill background with parent's background color because the visible component is smaller than its bounds (for the focus decoration).private static voidpaintRoundedSelectionImpl(Graphics2D g, int x, int y, int width, int height, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) static voidpaintSelection(Graphics2D g, int x, int y, int width, int height, Insets insets, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight, int flags) Paints a selection.static voidresetRenderingHints(Graphics g, Object[] oldRenderingHints) Resets rendering hints previously set withsetRenderingHints(Graphics).(package private) static voidrunWithLightAWTPeerUIDefaults(Runnable runnable) static voidrunWithoutRenderingHints(Graphics g, Object[] oldRenderingHints, Runnable runnable) Temporary resets rendering hints set withsetRenderingHints(Graphics)and runs the given runnable.static voidstatic Object[]Sets rendering hints used for painting.static booleansetUseSharedUIs(boolean useSharedUIs) Specifies whether shared UI delegates are used.static ColorstateColor(boolean state1, Color state1Color, boolean state2, Color state2Color, Color defaultColor) static ColorstateColor(boolean state, Color stateColor, Color defaultColor) static RectanglesubtractInsets(Rectangle r, Insets insets) (package private) static BorderunwrapNonUIResourceBorder(Border border)
-
Field Details
-
lightAWTPeerDefaults
-
MOVE_TO
public static final double MOVE_TO- Since:
- 3
- See Also:
-
QUAD_TO
public static final double QUAD_TO- Since:
- 3
- See Also:
-
CURVE_TO
public static final double CURVE_TO- Since:
- 3
- See Also:
-
ROUNDED
public static final double ROUNDED- Since:
- 3
- See Also:
-
CLOSE_PATH
public static final double CLOSE_PATH- Since:
- 3
- See Also:
-
Constructor Details
-
FlatUIUtils
public FlatUIUtils()
-
-
Method Details
-
addInsets
-
subtractInsets
-
addInsets
-
addInsets
-
setInsets
-
isInsetsEmpty
- Since:
- 3.5
-
stateColor
-
stateColor
-
getUIColor
-
getUIColor
-
getUIColor
-
getUIBoolean
- Since:
- 1.1
-
getUIInt
-
getUIFloat
-
getUIEnum
-
getSubUIColor
-
getSubUIBoolean
-
getSubUIInt
-
getSubUIInsets
-
getSubUIDimension
-
getSubUIIcon
-
getSubUIFont
-
buildSubKey
-
getBoolean
public static boolean getBoolean(JComponent c, String systemPropertyKey, String clientPropertyKey, String uiKey, boolean defaultValue) - Since:
- 1.1.2
-
isChevron
-
nonUIResource
-
nonUIResource
-
nonUIResource
-
unwrapNonUIResourceBorder
-
minimumWidth
-
minimumHeight
-
isCellEditor
-
isPermanentFocusOwner
Returns whether the given component is the permanent focus owner and is in the active window or in a popup window owned by the active window. Used to paint focus indicators. -
isInActiveWindow
-
isAWTPeer
-
needsLightAWTPeer
Checks whether component is used as peer for AWT (on macOS) and whether a dark FlatLaf theme is active, which requires special handling because AWT always uses light colors. -
runWithLightAWTPeerUIDefaults
-
isFullScreen
Returns whether the given component is in a window that is in full-screen mode. -
isRoundRect
-
getBorderFocusWidth
Returns the scaled thickness of the outer focus border for the given component. -
getBorderLineWidth
Returns the scaled line thickness used to compute the border insets.- Since:
- 2
-
getBorderFocusAndLineWidth
Returns the scaled thickness of the border. This includes the outer focus border and the actual component border.- Since:
- 2
-
getBorderArc
Returns the scaled arc diameter of the border for the given component. -
hasRoundBorder
-
getOutsideFlatBorder
-
setRenderingHints
-
resetRenderingHints
Resets rendering hints previously set withsetRenderingHints(Graphics). -
runWithoutRenderingHints
public static void runWithoutRenderingHints(Graphics g, Object[] oldRenderingHints, Runnable runnable) Temporary resets rendering hints set withsetRenderingHints(Graphics)and runs the given runnable.This is intended for painting text while rendering hints are set.
If text antialiasing is disabled (in OS system settings or via
-Dawt.useSystemAAFontSettings=off), but general antialiasing is enabled, then text is still painted using some kind of "grayscale" antialiasing, which may make the text look bold (depends on font and font size). To avoid this, temporary disable general antialiasing. This does not affect text rendering if text antialiasing is enabled (usually the default). -
deriveColor
-
paintComponentBackground
public static void paintComponentBackground(Graphics2D g, int x, int y, int width, int height, float focusWidth, float arc) Fills the background of a component with a rounded rectangle.The bounds of the painted rounded rectangle are
x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2). The given arc diameter refers to the painted rectangle (and not tox,y,width,height).- See Also:
-
paintOutlinedComponent
public 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) Paints an outlined component with rounded corners, consisting of following parts:- an (optional) outer border, which is usually a focus indicator
- an (optional) component border
- the (optional) component background
Each part is painted only if the corresponding part color is not
null. The parts are painted in this order:- background
- focus border
- border
Background: The bounds of the filled rounded rectangle are
[x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]. The focus border and the border may paint over the background.Focus border: The outside bounds of the painted focus border are
[x, y, width, height]. The thickness of the painted focus border is(focusWidth * focusWidthFraction) + focusInnerWidth. The border may paint over the focus border iffocusInnerWidth > 0.Border: The outside bounds of the painted border are
[x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]. The thickness of the painted border isborderWidth.- Parameters:
g- the graphics context used for paintingx- the x coordinate of the componenty- the y coordinate of the componentwidth- the width of the componentheight- the height of the componentfocusWidth- the width of the focus border, or0focusWidthFraction- 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(focusWidth * focusWidthFraction) + focusInnerWidthfocusInnerWidth- the inner width of the focus border, or0; if a border is painted thenfocusInnerWidthneeds to be larger thanborderWidthto be not hidden by the borderborderWidth- the width of the border, or0arc- the arc diameter used for the outside shape of the component border; the other needed arc diameters are computed from this arc diameterfocusColor- the color of the focus border, ornullborderColor- the color of the border, ornullbackground- the background color of the component, ornull- Since:
- 2
-
paintOutlinedComponent
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) -
paintOutlinedComponentImpl
private static void paintOutlinedComponentImpl(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 scaleFactor) -
paintOutline
public static void paintOutline(Graphics2D g, float x, float y, float w, float h, float lineWidth, float arc) Paints an outline at the given bounds using the given line width. Depending on the given arc, a rectangle, rounded rectangle or circle (if w == h) is painted.- Parameters:
g- the graphics context used for paintingx- the x coordinate of the outliney- the y coordinate of the outlinew- the width of the outlineh- the height of the outlinelineWidth- the width of the outlinearc- the arc diameter used for the outside shape of the outline- Since:
- 2
-
paintOutline
public static void paintOutline(Graphics2D g, float x, float y, float w, float h, float lineWidth, float arc, float innerArc) Paints an outline at the given bounds using the given line width. Depending on the given arc, a rectangle, rounded rectangle or circle (if w == h) is painted.- Parameters:
g- the graphics context used for paintingx- the x coordinate of the outliney- the y coordinate of the outlinew- the width of the outlineh- the height of the outlinelineWidth- the width of the outlinearc- the arc diameter used for the outside shape of the outlineinnerArc- the arc diameter used for the inside shape of the outline- Since:
- 2
-
createComponentRectangle
Creates a (rounded) rectangle used to paint components (border, background, etc.). The given arc diameter is limited to min(width,height). -
paintFilledRectangle
-
paintSelection
public static void paintSelection(Graphics2D g, int x, int y, int width, int height, Insets insets, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight, int flags) Paints a selection.The bounds of the painted selection (rounded) rectangle are
x + insets.left, y + insets.top, width - insets.left - insets.right, height - insets.top - insets.bottom. The given arc radius refers to the painted rectangle (and not tox,y,width,height).- Since:
- 3
-
paintRoundedSelectionImpl
private static void paintRoundedSelectionImpl(Graphics2D g, int x, int y, int width, int height, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) -
paintGrip
public static void paintGrip(Graphics g, int x, int y, int width, int height, boolean horizontal, int dotCount, int dotSize, int gap, boolean centerPrecise) -
paintParentBackground
Fill background with parent's background color because the visible component is smaller than its bounds (for the focus decoration). -
getParentBackground
Gets the background color of the first opaque parent. -
findOpaqueParent
-
createRectangle
Creates a not-filled rectangle shape with the given line width. -
createRoundRectangle
public static Path2D createRoundRectangle(float x, float y, float width, float height, float lineWidth, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) Creates a not-filled rounded rectangle shape and allows specifying the line width and the radius of each corner. -
createRoundRectanglePath
public static Shape createRoundRectanglePath(float x, float y, float width, float height, float arcTopLeft, float arcTopRight, float arcBottomLeft, float arcBottomRight) Creates a filled rounded rectangle shape and allows specifying the radius of each corner. -
createRoundTrianglePath
public static Shape createRoundTrianglePath(float x1, float y1, float x2, float y2, float x3, float y3, float arc) Creates a rounded triangle shape for the given points and arc radius.- Since:
- 3
-
paintArrow
public static void paintArrow(Graphics2D g, int x, int y, int width, int height, int direction, boolean chevron, int arrowSize, float arrowThickness, float xOffset, float yOffset) Paints a chevron or triangle arrow in the center of the given rectangle.- Parameters:
g- the graphics context used for paintingx- the x coordinate of the rectangley- the y coordinate of the rectanglewidth- the width of the rectangleheight- the height of the rectangledirection- the arrow direction (SwingConstants.NORTH,SwingConstants.SOUTHSwingConstants.WESTorSwingConstants.EAST)chevron-truefor chevron arrow,falsefor triangle arrowarrowSize- the width of the painted arrow (for vertical direction) (will be scaled)arrowThickness- the thickness of the painted chevron arrow (will be scaled)xOffset- an offset added to the x coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled)yOffset- an offset added to the y coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled)- Since:
- 3
-
createArrowShape
Creates a chevron or triangle arrow shape for the given direction and size.The chevron shape is an open path that can be painted with
Graphics2D.draw(Shape). The triangle shape is a close path that can be painted withGraphics2D.fill(Shape).- Parameters:
direction- the arrow direction (SwingConstants.NORTH,SwingConstants.SOUTHSwingConstants.WESTorSwingConstants.EAST)chevron-truefor chevron arrow,falsefor triangle arroww- the width of the returned shapeh- the height of the returned shape- Since:
- 1.1
-
createPath
Creates a closed path for the given points. -
createPath
Creates an open or closed path for the given points. -
lerp
private static double lerp(double v1, double v2, double t) Calculates linear interpolation between two values. https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support -
distance
private static double distance(double x1, double y1, double x2, double y2) Calculates the distance between two points. -
drawShapePure
Draws the given shape with disabled stroke normalization. The x/y coordinates of the shape are translated by a half pixel.- Since:
- 2.1
-
drawString
Draws the given string at the specified location. The provided component is used to query text properties and anti-aliasing hints.Use this method instead of
Graphics.drawString(String, int, int)for correct anti-aliasing.Replacement for
SwingUtilities2.drawString(). UsesHiDPIUtils.drawStringWithYCorrection(JComponent, Graphics2D, String, int, int). -
drawStringUnderlineCharAt
public static void drawStringUnderlineCharAt(JComponent c, Graphics g, String text, int underlinedIndex, int x, int y) Draws the given string at the specified location underlining the specified character. The provided component is used to query text properties and anti-aliasing hints.Replacement for
SwingUtilities2.drawStringUnderlineCharAt(). UsesHiDPIUtils.drawStringUnderlineCharAtWithYCorrection(JComponent, Graphics2D, String, int, int, int). -
hasOpaqueBeenExplicitlySet
-