我正在使用BasicTabbedPaneUI为JTabbedPane实现自己的外观。
this tutorial之后,我想在选项卡末尾添加关闭按钮。

到目前为止,我已经设法将我的关闭图标绘制在选项卡的右侧,但它覆盖了我的选项卡标题。因此,我想减少重写方法paintTab()中用于textRect参数的Rectangle的宽度。

我已经尝试过了,但是没有效果:

@Override
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex,
                        Rectangle iconRect, Rectangle textRect) {

    //reduce textrect width to leave space for close icon
    textRect.setSize(textRect.width - (2 * WIDTHDELTA + icon.getIconWidth()), textRect.height);

    super.paintTab(g, tabPlacement, rects, tabIndex, iconRect, textRect);

    Rectangle tabRect = rects[tabIndex];

    // Calculate the coordinates where the button should be.
    int dx = tabRect.x + tabRect.width - icon.getIconWidth() - WIDTHDELTA;
    int dy = tabRect.y + (tabRect.height - icon.getIconHeight()) / 2;

    //Paint the Close button
    icon.paintIcon(tabPane, g, dx, dy);
}


如何以及在哪里缩小用于绘制选项卡文本的矩形?

最佳答案

尝试使用BasicTabbedPaneUI的字段

protected Insets tabInsets;
protected Insets selectedTabPadInsets;
protected Insets tabAreaInsets;
protected Insets contentBorderInsets;


tabInsets用于您可以尝试覆盖的方法中

protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics)

10-06 10:06