设置JTabbedPane的背景颜色

时间:2010-03-15 07:07:11

标签: java swing jtabbedpane nimbus

我正在使用Nimbus外观和感觉。我需要在JTabbedPane中更改选项卡的背景颜色和前景色,但是在JTabbedPane中没有设置颜色。我尝试了setForeground(),setForegroundAt(),setBackground()和setBackgroundAt()方法,但它不起作用。这是我的代码


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(); }
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(); }

6 个答案:

答案 0 :(得分:9)

您可以做一些不同的事情,具体取决于您对确切颜色的控制程度。最简单的方法是更改​​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类。

答案 1 :(得分:3)

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

一些外观和感觉允许颜色主题(Substance浮现在脑海中),但是Nimbus似乎将这些颜色值硬编码到油漆代表中。

您很可能需要基于Nimbus实现自己的UI委托。有关详细信息,请参阅here这将是一个重大的痛苦,所以问问自己你想要改变这些颜色的程度。

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

答案 2 :(得分:2)

JTabbedPane在向其添加组件时起作用,例如添加5个JPanel,它们将被标记。

答案 3 :(得分:2)

抱歉我的英文。

我试过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 !!它的工作!

答案 4 :(得分:1)

如果要更改实际内容,选项卡式窗格有两种有用的方法: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);
}

后一种方法更灵活 - 您可以稍后使用此类代码对所有组件执行更复杂的操作。

答案 5 :(得分:1)

其实不是真的

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

然后创建简单的用户界面

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());            

        }
    }

....

}

Jan Cajthaml

它应该是这样的(不要介意QuadSpline选项卡和关闭吧,这是我的UI实现的另一个附加组件),我的声誉在这里是没有所以有一个链接到图像

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