TabPainterAdapter () { return new TabPainterAdapter() { private final JBTabPainter myTabPainter = new JBDefaultTabPainter(new DefaultTabTheme() { @Override public int getTopBorderThickness() { return 0; } @Override public @Nullable Color getInactiveColoredTabBackground() { return null; } }); @Override public @NotNull JBTabPainter getTabPainter() { return myTabPainter; } @Override public void paintBackground(@NotNull TabLabel label, @NotNull Graphics g, @NotNull JBTabsImpl tabs) { Rectangle rect = new Rectangle(0, 0, label.getWidth(), label.getHeight()); TabInfo info = label.getInfo(); Graphics2D g2d = (Graphics2D)g; int index = tabs.getIndexOf(info); int lastIndex = tabs.getTabCount() - 1; int border = JBUI.scale(1); if (info.getObject() == myNativeWindow) { Window window = ComponentUtil.getWindow(WindowTabsComponent.this); Color tabColor = JBUI.CurrentTheme.MainWindow.Tab.background(true, window != null && !window.isActive(), false); myTabPainter.paintTab(tabs.getTabsPosition(), g2d, rect, tabs.getBorderThickness(), tabColor, true, false); g.setColor(JBUI.CurrentTheme.MainWindow.Tab.BORDER); LinePainter2D.paint(g2d, 0, 0, rect.width, 0, LinePainter2D.StrokeType.INSIDE, border); if (index > 0) { LinePainter2D.paint(g2d, 0, 0, 0, rect.height, LinePainter2D.StrokeType.INSIDE, border); } if (index < lastIndex) { LinePainter2D.paint(g2d, rect.width - border, 0, rect.width - border, rect.height, LinePainter2D.StrokeType.INSIDE, border); } } else { Color tabColor = JBUI.CurrentTheme.MainWindow.Tab.background(false, false, label.isHovered()); myTabPainter.paintTab(tabs.getTabsPosition(), g2d, rect, tabs.getBorderThickness(), tabColor, true, false); if (lastIndex > 1 && index < lastIndex && tabs.getTabAt(index + 1) != tabs.getSelectedInfo()) { g.setColor(JBUI.CurrentTheme.MainWindow.Tab.SEPARATOR); LinePainter2D.paint(g2d, rect.width - border, 0, rect.width - border, rect.height, LinePainter2D.StrokeType.INSIDE, border); } } } }; }