在我的程序中,我为选项卡式窗格重写了函数getForeGroundAt和getBackgroundAt:
jtp = new JTabbedPane(SwingConstants.LEFT) {
public Color getForegroundAt(int index) {
if (getSelectedIndex() == index) {
System.out.println("ueue1");
return new Color(69, 69, 69);
}
return new Color(188, 188, 188);
}
public Color getBackgroundAt(int index) {
if (getSelectedIndex() == index) {
System.out.println("ueue2");
return new Color(247, 248, 243);
}
return new Color(255, 255, 255);
}
};
我面临的问题是getBackgrountAt方法中的print语句永远不会被调用,即使我在setForegroundAt中的那个选项卡正常运行时选择了不同的选项卡。结果是我无法设置所选选项卡的背景颜色,但我可以设置前景色。我该如何解决这个问题?感谢。
答案 0 :(得分:0)
这是LAF功能。 BasicTabbedPaneUI的代码如下:
Color selectedColor = UIManager.getColor("TabbedPane.selected");
...
...
g.setColor(!isSelected || selectedColor == null ?
tabPane.getBackgroundAt(tabIndex) : selectedColor);
因此UIManager中的属性具有优先权。您可以尝试使用所需的颜色更新UIManager:
UIManager.put("TabbedPane.selected", ...);
有关更多信息和UIManager属性列表,请参阅UIManager Defaults。前台没有此问题,因为所选前景没有默认属性。