JTBbedPane的getBackgroundAt方法没有正常运行

时间:2014-04-17 06:42:30

标签: java swing colors background jtabbedpane

在我的程序中,我为选项卡式窗格重写了函数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中的那个选项卡正常运行时选择了不同的选项卡。结果是我无法设置所选选项卡的背景颜色,但我可以设置前景色。我该如何解决这个问题?感谢。

1 个答案:

答案 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。前台没有此问题,因为所选前景没有默认属性。