How to change background color of JTabbedPane?

后端 未结 2 1358
一向
一向 2020-11-27 08:05

I know you can modify the LaF properties, but how do you accomplish this without doing such? I only ask because setBackground doesn\'t seem to do it.

No

相关标签:
2条回答
  • 2020-11-27 08:40

    Using TabComponentsDemo as an example, setBackgroundAt() seems to work:

    private void initTabComponent(int i) {
        pane.setTabComponentAt(i, new ButtonTabComponent(pane));
        pane.setBackgroundAt(i, Color.getHSBColor((float)i/tabNumber, 1, 1));
    }
    

    Addendum: As @camickr helpfully observed, the target component must be opaque.

    TabColors

    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTabbedPane;
    
    /** @see http://stackoverflow.com/questions/8752037 */
    public class TabColors extends JPanel {
    
        private static final int MAX = 5;
        private final JTabbedPane pane = new JTabbedPane();
    
        public TabColors() {
            for (int i = 0; i < MAX; i++) {
                Color color = Color.getHSBColor((float) i / MAX, 1, 1);
                pane.add("Tab " + String.valueOf(i), new TabContent(i, color));
                pane.setBackgroundAt(i, color);
            }
            this.add(pane);
        }
    
        private static class TabContent extends JPanel {
    
            private TabContent(int i, Color color) {
                setOpaque(true);
                setBackground(color);
                add(new JLabel("Tab content " + String.valueOf(i)));
            }
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }
        }
    
        private void display() {
            JFrame f = new JFrame("TabColors");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(this);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new TabColors().display();
                }
            });
        }
    }
    
    0 讨论(0)
  • 2020-11-27 08:42

    You can also do the following:

    for (int i = 0; i < this.getTabCount(); i++) {
        this.getComponentAt(i).setBackground(Color.DARK_GRAY);
    }
    

    or

    for (int i = 0; i < this.getTabCount(); i++) {
                this.setBackgroundAt(i, Color.DARK_GRAY);
                this.getComponentAt(i).setBackground(Color.DARK_GRAY);
    }
    

    for tab and panel backgrounds

    0 讨论(0)
提交回复
热议问题