如何在运行时更改JTabbedPane的背景颜色?

时间:2012-10-26 11:14:34

标签: java swing look-and-feel jtabbedpane uimanager

我找到大量使用JTabbedPanesetBackgroundAt()

更改UIManager.put("JTabbedPane...")背景颜色的示例

但是,我想在一个复选框上创建一个onclick事件,当您选择它时将背景颜色更改为绿色,并在取消选择时恢复为默认值。

我还没有能够使用上述方法完成这项工作。

有什么想法吗?

PS:我可以使用setForgroundAt()更改前景色,但出于某种原因不能改变背景

3 个答案:

答案 0 :(得分:4)

LAF可以自由地忽略某些的自定义设置(仅视觉?不知道)JComponent属性,as documented f.i。:

  

要尊重这个属性取决于外观和感觉,有些人可能会选择忽略它。

所以结果是高度依赖LAF(Metalfor和Motif中的Worksforme,而不是Nimbus / Win)没有简单安全的方法(除了调整ui委托,这不是一个真正的选择)

答案 1 :(得分:2)

覆盖paintComponent并更改其中的颜色。

@Override
public void paintComponent(Graphics g) {
    g.setColor(new Color(color));
    g.fillRect(0, 0, getWidth(), getHeight());

答案 2 :(得分:0)

设置每个选项卡面板的背景/前景色后,请尝试以下操作。这应该使顶部的选项卡与JTabbedPane(myTabs)中的面板颜色相同。这适用于Nimbus。

for (int c = 0; c < myTabs.getComponentCount(); ++c)
{
  myTabs.setBackgroundAt(c, myTabs.getComponentAt(c).getBackground());
  myTabs.setForegroundAt(c, myTabs.getComponentAt(c).getForeground());
}

myTabs.setOpaque(true);
myTabs.setUI(new BasicTabbedPaneUI());