我知道您可以modify the LaF properties,但是如何不这样做却如何完成呢?我只问一下,因为setBackground似乎没有这样做。

请注意,我要更改以下属性:

  • TabbedPane.background(或TabbedPane.contentAreaColor吗?)
  • TabbedPane.tabAreaBackground
  • 最佳答案

    TabComponentsDemo 为例,setBackgroundAt()似乎可以工作:

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

    附录:@camickr很有帮助地观察到,目标组件必须是opaque
    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();
                }
            });
        }
    }
    

    10-08 18:36