

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.GridLayout;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;


public class TestTabbedPane {

    private static JFrame frame;
    private static JTabbedPane tabPane;

    public static void main(String[] args) throws Exception {
        createAndShowUI();
    }


    private static void createAndShowUI() {
        int NUM_TABS = 15;
        frame = new JFrame("Test JTabbedPane Opaque Color");
        JTabbedPane tabPane = new JTabbedPane();
        tabPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
        tabPane.setTabPlacement(JTabbedPane.TOP);

        for (int i = 0; i < NUM_TABS; ++i) {
            tabPane.addTab("Tab " + i, new JLabel("Content Area"));
        }
        JPanel panel = new JPanel(new BorderLayout());
        panel.add(tabPane, BorderLayout.CENTER);
        panel.setBackground(Color.green);
        tabPane.setBackground(Color.red);

        JCheckBox contentOpaqueChkBox = new JCheckBox(new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                if (((AbstractButton)e.getSource()).isSelected()) {
                    UIManager.put("TabbedPane.contentOpaque", Boolean.TRUE);
                } else {
                    UIManager.put("TabbedPane.contentOpaque", Boolean.FALSE);
                }
                tabPane.repaint();
                SwingUtilities.updateComponentTreeUI(frame);
            }
        });
        contentOpaqueChkBox.setText("Content Opaque");
        contentOpaqueChkBox.setSelected(true);
        contentOpaqueChkBox.setEnabled(true);

        JCheckBox tabOpaqueChkBox = new JCheckBox(new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                if (((AbstractButton)e.getSource()).isSelected()) {
                    UIManager.put("TabbedPane.tabsOpaque", Boolean.TRUE);
                } else {
                    UIManager.put("TabbedPane.tabsOpaque", Boolean.FALSE);
                }
                tabPane.repaint();
                SwingUtilities.updateComponentTreeUI(frame);
            }
        });
        tabOpaqueChkBox.setText("Tabs Opaque");
        tabOpaqueChkBox.setSelected(true);
        tabOpaqueChkBox.setEnabled(true);

        JCheckBox tabPaneOpaqueChkBox = new JCheckBox(new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                tabPane.setOpaque(((AbstractButton)e.getSource()).isSelected());
                contentOpaqueChkBox.setEnabled(!((AbstractButton)e.getSource()).isSelected());
                tabOpaqueChkBox.setEnabled(!((AbstractButton)e.getSource()).isSelected());
                tabPane.repaint();
                SwingUtilities.updateComponentTreeUI(frame);
            }
        });
        tabPaneOpaqueChkBox.setText("Opaque");

        JPanel checkBoxPanel = new JPanel();
        checkBoxPanel.add(tabPaneOpaqueChkBox);
        checkBoxPanel.add(contentOpaqueChkBox);
        checkBoxPanel.add(tabOpaqueChkBox);

        panel.add(checkBoxPanel, BorderLayout.NORTH);
        frame.add(panel);
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}