设置JTabbedPane的背景颜色

我正在使用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(); } } 

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

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的文章。 请务必查看标题为“Nimbus UIDefaults Properties List”的链接。 除了将颜色按摩到类似于你想要的东西之外,你将不得不开始做一些混乱的事情,比如实现自定义绘画的Painter类。

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

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

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

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

JTabbedPane在向其添加组件时起作用,例如添加5个JPanel并且它们将被选项卡。

对不起我的英语不好。

我试过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); 

我的天啊!! 这是工作!

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

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

其实不是真的

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

Jan Cajthaml

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

http://sofzh.miximages.com/java/166028_2974620064454_896181702_n.jpg