Can't change JProgressBar color in Mac OS look and feel

前端 未结 1 1037
不知归路
不知归路 2020-12-07 04:27

I know this question has been answered before, but it\'s just not working for me. I followed the instructions from here: How to change JProgressBar color?

im         


        
1条回答
  •  独厮守ぢ
    2020-12-07 04:52

    To override Look & Feel defaults, make the change before constructing the GUI on the event dispatch thread, as shown below.

    On the com.apple.laf.AquaLookAndFeel, the progress bar's UI delegate is an instance of com.apple.laf.AquaProgressBarUI. As you have found, it ignores many defaults in favor of the native component. If a novel color scheme is required, consider supplying your own UI delegate, as shown here.

    AquaProgressBarUI:

    AquaProgressBarUI

    CustomProgressUI:

    CustomProgressUI

    ProgressBar UI Defaults:

    ProgressBar.background: com.apple.laf.AquaNativeResources$CColorPaintUIResource[r=238,g=238,b=238]
    ProgressBar.border: javax.swing.plaf.BorderUIResource@47f08ed8
    ProgressBar.cellLength: 1
    ProgressBar.cellSpacing: 0
    ProgressBar.cycleTime: 3000
    ProgressBar.font: sun.swing.SwingLazyValue@6446d228
    ProgressBar.foreground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
    ProgressBar.horizontalSize: javax.swing.plaf.DimensionUIResource[width=146,height=12]
    ProgressBar.repaintInterval: 20
    ProgressBar.selectionBackground: javax.swing.plaf.ColorUIResource[r=255,g=255,b=255]
    ProgressBar.selectionForeground: javax.swing.plaf.ColorUIResource[r=0,g=0,b=0]
    ProgressBar.verticalSize: javax.swing.plaf.DimensionUIResource[width=12,height=146]
    ProgressBarUI: com.apple.laf.AquaProgressBarUI
    

    SSCCE:

    import java.awt.*;
    import javax.swing.*;
    
    public class ProgressBarTest extends JFrame {
    
        public static void main(String args[]) {
            UIManager.put("ProgressBar.repaintInterval", 100);
            UIManager.put("ProgressBar.border",
                BorderFactory.createLineBorder(Color.blue, 2));
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    JFrame f = new JFrame();
                    f.setLayout(new GridLayout(0, 1, 5 , 5));
                    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    f.add(createBar());
                    f.add(createBar());
                    f.add(createBar());
                    f.pack();
                    f.setLocationRelativeTo(null);
                    f.setVisible(true);
                }
    
                private JProgressBar createBar() {
                    JProgressBar progressBar = new JProgressBar(0, 100);
                    progressBar.setValue(50);
                    return progressBar;
                }
            });
        }
    }
    

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