java - 无法更改 Mac OS 外观中的 JProgressBar 颜色

标签 java swing colors look-and-feel jprogressbar

我知道这个问题之前已经得到解答,但它对我不起作用。我按照这里的说明进行操作:How to change JProgressBar color?

import javax.swing.*;
import java.awt.*;

public class ProgressBarTest extends JFrame {

    public static void main(String args[]) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        UIManager.put("ProgressBar.background", Color.orange);
        UIManager.put("ProgressBar.foreground", Color.black);
        UIManager.put("ProgressBar.selectionBackground", Color.red);
        UIManager.put("ProgressBar.selectionForeground", Color.green);
        JProgressBar progressBar = new JProgressBar(0,100);
        progressBar.setValue(50);
        f.add(progressBar, BorderLayout.PAGE_END);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

}

我得到的只是相同的旧颜色。

AquaProgressBarUI

我使用的是 Mac OS X 10.7.3 和 Java 1.6。我尝试了 CrossPlatformLookAndFeel,它适用于新颜色。但是我希望它具有默认的外观和感觉。我怎样才能做到这一点?

最佳答案

要覆盖默认外观和感觉,请在 event dispatch thread 上构建 GUI 之前进行更改。 ,如下图。

com.apple.laf.AquaLookAndFeel上,进度条的UI委托(delegate)是com.apple.laf.AquaProgressBarUI的实例。正如您所发现的,它忽略了许多有利于 native 组件的默认设置。如果需要新颖的配色方案,请考虑提供您自己的 UI 委托(delegate),如图 here 所示。 .

AquaProgressBarUI:

AquaProgressBarUI

自定义进度UI:

CustomProgressUI

进度条 UI 默认值:

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;
            }
        });
    }
}

关于java - 无法更改 Mac OS 外观中的 JProgressBar 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11148120/

相关文章:

java - ANDROID 使用 AsyncTask MySQL 通过 JSON 更新 ListView

java - 为什么我不能在构造函数中调用非静态方法作为 this 参数?

具有自定义数据格式的 JavaFX DragAndDrop

java - BoxLayout 显示不正确

iphone - iPhone 上的色彩平衡

java - 将整数映射为深色

java - graph/dnd java Web 应用程序使用哪个框架

java - JFrame 在调整大小时重复绘图

java - JTextPane 超出了 JDialog 的边界

android - 如何在android中的句子中间更改文本颜色