Rectangle getTabAreaLayoutBounds( int tabPlacement, Insets tabAreaInsets ) {
			int tabPaneWidth = tabPane.getWidth();
			int tabPaneHeight = tabPane.getHeight();
			Insets insets = tabPane.getInsets();

			Rectangle tr = new Rectangle();
			if( tabPlacement == TOP || tabPlacement == BOTTOM ) {
				// tab area height (maxTabHeight is zero if tab count is zero)
				int tabAreaHeight = (maxTabHeight > 0)
					? maxTabHeight
					: Math.max(
						Math.max( getLeadingPreferredHeight(), getTrailingPreferredHeight() ),
						scale( clientPropertyInt( tabPane, TABBED_PANE_TAB_HEIGHT, tabHeight ) ) );

				// tab area bounds
				tr.x = insets.left;
				tr.y = (tabPlacement == TOP)
					? insets.top + tabAreaInsets.top
					: (tabPaneHeight - insets.bottom - tabAreaInsets.bottom - tabAreaHeight);
				tr.width = tabPaneWidth - insets.left - insets.right;
				tr.height = tabAreaHeight;
			} else { // LEFT and RIGHT tab placement
				// tab area width (maxTabWidth is zero if tab count is zero)
				int tabAreaWidth = (maxTabWidth > 0)
					? maxTabWidth
					: Math.max( getLeadingPreferredWidth(), getTrailingPreferredWidth() );

				// tab area bounds
				tr.x = (tabPlacement == LEFT)
					? insets.left + tabAreaInsets.left
					: (tabPaneWidth - insets.right - tabAreaInsets.right - tabAreaWidth);
				tr.y = insets.top;
				tr.width = tabAreaWidth;
				tr.height = tabPaneHeight - insets.top - insets.bottom;
			}
			return tr;
		}
Returns bounds for leading/trailing components and tab area.

Note: Returns bounds for first tabs row only.
For multi-rows tabs in wrap mode, the returned bounds does not include full tab area.
flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java