所以有一点背景知识,我正在创建一个子类来扩展
JTabbedPane()
组件,添加一些额外的方法,并且主要使用 BasicTabbedPaneUI
应用特定的外观。为了自定义选项卡,我一直覆盖 paintTab()
方法,但我无法看到获取所选选项卡索引的方法(以便以不同方式绘制所选选项卡),我也没有能够弄清楚如何获取每个选项卡的文本。
到目前为止,我已经尝试使用
paintTabBackground()
方法(使用与我在 paintTab()
方法中使用的代码相同的代码),但我不相信这是实现我正在寻找的方法,我有浏览了 java 文档,并没有真正看到任何关于我应该使用的其他方法的指示。
myTabbedPaneUI
的当前(相关)代码(我对BasicTabbedPaneUI
的实现如下:
private static class myTabbedPaneUI extends BasicTabbedPaneUI {
@Override
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect) {
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.PINK);
g2d.fillRoundRect(rects[tabIndex].x, rects[tabIndex].y, rects[tabIndex].width, rects[tabIndex].height+20, 6, 6);
g2d.setColor(Color.BLUE);
g2d.drawRoundRect(rects[tabIndex].x, rects[tabIndex].y, rects[tabIndex].width, rects[tabIndex].height+20, 6, 6);
g2d.setColor(Color.BLACK);
g2d.drawString("Test String", 0, 0);
}
我或多或少正在寻找一种方法来做这样的事情:
@Override
protected void paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect) {
Graphics2D g2d = (Graphics2D)g;
if (tabIndex == selectedTabIndex){
drawSelected();
} else {
drawUnselected();
}
g2d.drawString(tabText, 0, 0);
}
感谢任何帮助,提前感谢大家!
BasicTabbedPaneUI 包含受保护的字段 tabPane。所以从paintTab 我们可以访问
并且int selectedTabIndex = tabPane.getSelectedIndex();
- @SharadPaulString tabText = tabPane.getTitleAt(tabIndex);