设置JTabbedPane的背景颜色

问题描述:

我使用的是Nimbus外观。我需要更改JTabbedPane中选项卡的背景颜色和前景颜色,但颜色不会在JTabbedPane中设置。我试图setForeground(),setForegroundAt()的setBackground()和setBackgroundAt()方法,但它不是works.This是我的代码设置JTabbedPane的背景颜色


public class TabbedPaneDemo extends JFrame 
{ 
    TabbedPaneDemo() 
    { 
     try 
     { 
      UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
     } 
     catch(Exception ex) {}

setLayout(new BorderLayout()); setBounds(100, 100, 800, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTabbedPane jt = new JTabbedPane(); jt.addTab("Tab1", new JPanel()); jt.addTab("Tab2", new JPanel()); jt.addTab("Tab3", new JPanel()); jt.addTab("Tab4", new JPanel()); for(int i = 0; i < jt.getComponentCount(); i++) { jt.setForegroundAt(i, Color.RED); jt.setBackgroundAt(i, Color.BLACK); } add(jt); setVisible(true); } public static void main(String args[]) { new TabbedPaneDemo(); }

}

您可以做几件不同的事情,具体取决于您想要的准确颜色的控制程度。最简单的方法是更改​​UIManager中的某些属性,以更改Nimbus从其中获取其他颜色的颜色。我打得四处一点与您的代码,并发现,如果我把下面的代码中调用UIManager.setLookAndFeel()后,它会接近你在你的例子试图红色的黑色的外观:

 UIManager.put("nimbusBase", new ColorUIResource(0, 0, 0)); 
    UIManager.put("textForeground", new ColorUIResource(255, 0, 0)); 

我会让你试验。欲了解更多信息,请阅读关于配置Nimbus here的好文章。一定要看看他的标题为“Nimbus UIDefaults Properties List”的链接。除了将颜色按摩到与您想要的类似的东西之外,您必须开始做一些混乱的事情,比如实施自定义绘画的Painter类。

JTabbedPane的工作,当你将组件添加到它,例如添加5个JPanels,它们将被标记。

+0

我已将面板添加到JTabbedPane。这是我的代码 JTabbedPane jt = new JTabbedPane(); jt.addTab(“Tab1”,new JPanel()); jt.addTab(“Tab2”,new JPanel()); jt.addTab(“Tab3”,new JPanel()); jt.addTab(“Tab4”,new JPanel()); jt.setForeground(Color.RED); jt.setBackground(Color.BLACK); jf.add(jt); //将JTabbedPane添加到JFrame – Ram 2010-03-15 07:22:17

如果要更改实际内容,则选项卡式窗格有两种有用的方法:setForegroundAtsetBackgroundAt。您可以通过所有的标签,只是循环调用这些:

for (int i = 0; i < pane.getTabCount(); i++) { 
    pane.setForegroundAt(i, foregroundColor); 
    pane.setBackgroundAt(i, backgroundColor); 
} 

您还可以使用getComponentAt,类似地:

for (int i = 0; i < pane.getTabCount(); i++) { 
    pane.getComponentAt(i).setForeground(foregroundColor); 
    pane.getComponentAt(i).setBackground(backgroundColor); 
} 

后一种方法更灵活 - 您可以稍后做更复杂所有组件使用这样的代码。

我讨厌将它分解给你,但你将很难得到改变前景和背景的颜色。与许多基本组件(JTextField,JLabel等)不同,JTabbedPane在设置绘画时会忽略前景和背景颜色。相反,它允许UI委托(由当前的外观和感觉决定)来选择颜色。

一些外观和感觉允许颜色主题(想到Substance),但Nimbus似乎将这些颜色值硬编码到绘画代表中。

很可能你需要基于Nimbus的实现你自己的UI委托。有关更多信息,请参阅here这将是一个主要的痛苦,所以问问自己多少你想要这些颜色改变。

最后,如果有人告诉你简单地继承JTabbedPane的子类并在你自己的“paintComponent”方法中设置颜色,那就忽略它。然后,您将负责绘制整个组件,并且将失去任何类似Nimbus的视觉属性。

+0

我第二个Jason - 我花了好几天的时间试图让Nimbus中的JTabbedPane显示Tabs更深一点(因为当您指定灯光基色时,它们几乎变白)。非常令人沮丧的是,你需要在Nimbus内部获得学位...... – Philippp 2011-09-21 03:33:21

对不起,我的英语。

我试着解决这个问题2天..有“解决”解决方案。

需要设置选项卡组件。然后为此组件设置颜色。

/* 
    ... 
    Setting LAF Nimbus 
    ... 
*/ 

JTabbedPane tp = new JTabbedPane(); 

/* 
    ... 
    add tabs in TabbedPane 
    ... 
*/ 

然后指定标签需要做的:

 JLabel title = new JLabel(tp.getTitleAt(tabIndex)); 
     title.setForeground(Color.RED); 
     tp.setTabComponentAt(tabIndex, title); 

OMG!是工作!

+0

+1不错的一个 - 但请注意,它不适用于背景颜色。 – DNA 2012-03-27 11:06:51

其实不是真正的

new JTabbedPane().setUI(new YourUI()); 

,然后您创建简单的UI

public class YourUI extends BasicTabbedPaneUI{ 

..... 

private class ScrollableTabPanel extends JPanel implements UIResource { 
public ScrollableTabPanel() { 
    setLayout(null); 
} 

public void paintComponent(Graphics g) { 

super.paintComponent(g); 

g.setColor(Color.red); 
g.fillRect(tabPane.getBounds());    

     } 
    } 

.... 

} 

月Cajthaml

有是应该的样子(不介意QuadSpline标签并关闭酒吧这是我的UI实现的另一个附加组件),我在这里的声望是没有的,所以有一个链接到图像

http://a5.sphotos.ak.fbcdn.net/hphotos-ak-ash3/166028_2974620064454_896181702_n.jpg