2

この質問は以前に回答されていることは知っていますが、私にとってはうまくいきません。ここからの指示に従いました: JProgressBar の色を変更するには?

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が、新しい色で動作します。ただし、これをデフォルトのルック アンド フィールで使用したいと考えています。これどうやってするの?

4

1 に答える 1

4

ルック アンド フィールのデフォルトをオーバーライドするには、以下に示すように、イベント ディスパッチ スレッドでGUI を構築する前に変更を加えます。

ではcom.apple.laf.AquaLookAndFeel、プログレス バーの UI デリゲートは のインスタンスですcom.apple.laf.AquaProgressBarUI。お気づきのように、ネイティブ コンポーネントを優先して多くのデフォルトを無視します。新しい配色が必要な場合は、ここに示すように、独自の UI デリゲートを提供することを検討してください。

AquaProgressBarUI:

AquaProgressBarUI

CustomProgressUI:

CustomProgressUI

ProgressBar 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.horizo​​ntalSize: javax.swing.plaf.DimensionUIResource[幅=146,高さ=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[幅=12、高さ=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;
            }
        });
    }
}
于 2012-06-22T00:46:08.810 に答える