@Override
	protected void paintText( Graphics g, int tabPlacement, Font font, FontMetrics metrics,
		int tabIndex, String title, Rectangle textRect, boolean isSelected )
	{
		if( !_tabPane.isEnabled() || !_tabPane.isEnabledAt( tabIndex ) ) {
			// super method paints disabled text twice with different colors
			// and one pixel offset to simulate disabled text
			// --> draw only once with disabledForeground
			class DisabledTextGraphics extends Graphics2DProxy {
				private int count;

				public DisabledTextGraphics( Graphics delegate ) {
					super( (Graphics2D) delegate );
				}

				@Override
				public Graphics create() {
					return new DisabledTextGraphics( super.create() );
				}

				@Override
				public void drawString( String str, int x, int y ) {
					count++;
					if( (count % 2) != 1 )
						return;

					setColor( disabledForeground );
					super.drawString( str, x, y );
				}
			}
			g = new DisabledTextGraphics( g );
		}

		Graphics g2 = g;
		FlatUIUtils.runWithoutRenderingHints( g, oldRenderingHints, () -> {
			super.paintText( g2, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected );
		} );
	}
The content border insets are used to create a separator between tabs and content.
If client property JTabbedPane.hasFullBorder is true, then the content border insets
are also used for the border.
flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideTabbedPaneUI.java