private void updateArrowButtons() {
			if( !scrollableTabLayoutEnabled() || !_tabPane.isTabShown() )
				return;

			Insets insets = _tabPane.getInsets();
			int tabPlacement = _tabPane.getTabPlacement();
			Insets tabAreaInsets = getTabAreaInsets( tabPlacement );
			Dimension tsize = isTabTrailingComponentVisible() ? _tabTrailingComponent.getSize() : new Dimension();

			if( tabPlacement == TOP || tabPlacement == BOTTOM ) {
				// for BOTTOM tab placement, _maxTabHeight is not correct if having tall leading/trailing component
				int maxTabHeight = (tabPlacement == BOTTOM)
					? calculateMaxTabHeight( tabPlacement )
					: _maxTabHeight;

				// button bounds
				boolean leftToRight = isLeftToRight();
				int x = leftToRight
					? _tabPane.getWidth() - insets.right - tsize.width
					: insets.left + tsize.width;
				int y = _tabScroller.viewport.getY();
				int h = maxTabHeight;
				if( tabPlacement == TOP ) {
					// if leading or trailing component is taller than tab area then
					// _tabScroller.viewport has same height as leading/trailing component
					// but tabs are painted smaller
					y += (_tabScroller.viewport.getHeight() - h - tabAreaInsets.bottom);
				} else
					y += tabAreaInsets.top;

				// layout buttons
				if( !isShowCloseButtonOnTab() )
					x = layoutButtonHorizontal( _tabScroller.closeButton, 16, x, y, h, leftToRight );
				x = layoutButtonHorizontal( _tabScroller.listButton, 24, x, y, h, leftToRight );
				x = layoutButtonHorizontal( _tabScroller.scrollForwardButton, 16, x, y, h, leftToRight );
				x = layoutButtonHorizontal( _tabScroller.scrollBackwardButton, 16, x, y, h, leftToRight );

				// layout tab area
				Rectangle r = _tabScroller.viewport.getBounds();
				if( leftToRight )
					_tabScroller.viewport.setSize( x - r.x, r.height );
				else
					_tabScroller.viewport.setBounds( x, r.y, r.width - (x - r.x), r.height );

			} else { // LEFT and RIGHT tab placement
				// for RIGHT tab placement, _maxTabWidth is not correct if having wide leading/trailing component
				int maxTabWidth = (tabPlacement == RIGHT)
					? calculateMaxTabWidth( tabPlacement )
					: _maxTabWidth;

				// button bounds
				int x = _tabScroller.viewport.getX();
				int y = _tabPane.getHeight() - insets.bottom - tsize.height;
				int w = maxTabWidth;
				if( tabPlacement == LEFT ) {
					// if leading or trailing component is wider than tab area then
					// _tabScroller.viewport has same width as leading/trailing component
					// but tabs are painted smaller
					x += (_tabScroller.viewport.getWidth() - w - tabAreaInsets.right);
				} else
					x += tabAreaInsets.left;

				// layout buttons
				if( !isShowCloseButtonOnTab() )
					y = layoutButtonVertical( _tabScroller.closeButton, 16, x, y, w );
				y = layoutButtonVertical( _tabScroller.listButton, 24, x, y, w );
				y = layoutButtonVertical( _tabScroller.scrollForwardButton, 16, x, y, w );
				y = layoutButtonVertical( _tabScroller.scrollBackwardButton, 16, x, y, w );

				// layout tab area
				Rectangle r = _tabScroller.viewport.getBounds();
				_tabScroller.viewport.setSize( r.width, y - r.y );
			}
		}
Actually does nearly the same as super.paintContentBorder() but
  - not invoking paintContentBorder*Edge() methods
  - repaint selection
flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideTabbedPaneUI.java