views:

674

answers:

4
+2  A: 

JTabbedPane works when you add components to it, e.g add 5 JPanels and they will be tabbed.

Halo
I have added the panels to JTabbedPane. This is my code 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); //adding JTabbedPane to JFrame
Ram
+1  A: 

If you want to change the actual content, there are two useful methods of the tabbed pane: setForegroundAt and setBackgroundAt. You can just loop through all the tabs and call these:

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

You can also use getComponentAt as well, similarly:

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

The latter approach is more flexible--you can later do more complex things to all the components using code like this.

Tikhon Jelvis
+2  A: 

I hate to break it to you, but you're going to have a very hard time getting the foreground and background colors changed. Unlike many basic components (JTextField, JLabel, etc), the JTabbedPane ignores the foreground and background colors when setting up to paint. Instead it allows the UI delegate (as determined by the current Look and Feel) to choose the colors.

Some Look and Feels allow for color themes (Substance comes to mind), but Nimbus seems to have those color values hard coded into the paint delegates.

More than likely you'll need to implement your own UI delegate based off of Nimbus's. See here for more information. It's going to be a major pain, so ask yourself how much you want those colors changed.

Lastly, if anyone tells you to simply subclass JTabbedPane and set the colors in your own "paintComponent" method, ignore it. You then becomes responsible for the painting of the entire component, and will lose any Nimbus-like visual attributes.

Jason Nichols
+2  A: 

There are a few different things you can do, depending upon how much control you want over the exact color. The easiest way is to change some of the properties in the UIManager to change the colors that Nimbus derives its other colors from. I played around a little with your code, and found that if I put the following code after the call to UIManager.setLookAndFeel(), it would approximate the red-on-black look you attempted in your example:

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

I'll leave it to you to experiment. For more information to experiment with, there is a good article on configuring Nimbus here. Be sure you look at his link titled "Nimbus UIDefaults Properties List". Outside of just massaging the colors to something similar to what you want, you'll have to start doing messy things like implementing Painter classes that do custom painting.

Rob Heiser