我正在使用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)