4

i'm developing a little GUI application with Java using Netbeans Editor. I've put in a JFrame a simple Progress Bar. I'm developing the project with JDK7

I want to change the background Color from default Orange to a personal one. I've already tried all the properties for the color changing but when i run the program the color still the same.

I've already tried using ProgressBar1.setBackground(new java.awt.Color(0, 204, 255));

and

UIManager.put("ProgressBar.background", Color.YELLOW);
UIManager.put("ProgressBar.foreground", Color.MAGENTA);
UIManager.put("ProgressBar.selectionBackground", Color.red);
UIManager.put("ProgressBar.selectionForeground", Color.green);

Same result..... The background is always orange

Here the code of my test project

public class Frame extends javax.swing.JFrame
{

    public Frame()
    {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jProgressBar1 = new javax.swing.JProgressBar();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jProgressBar1.setBackground(new java.awt.Color(0, 204, 255));
        jProgressBar1.setValue(75);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    public static void main(String args[])
    {
        try
        {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Frame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Frame().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JProgressBar jProgressBar1;
    // End of variables declaration
}

and this is the result when you launch the code progress bar
(source: uploadscreenshot.com)

Orange color....

EDIT With the following code

UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled].backgroundPainter", new FillPainter(Color.MAGENTA)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled].backgroundPainter", new FillPainter(Color.MAGENTA)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Indeterminate].progressPadding", new FillPainter(Color.ORANGE)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled].foregroundPainter", new FillPainter(Color.GREEN)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled].foregroundPainter", new FillPainter(Color.GREEN)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Finished].foregroundPainter", new FillPainter(Color.GREEN)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled+Finished].foregroundPainter", new FillPainter(Color.GREEN)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Disabled+Indeterminate].foregroundPainter", new FillPainter(Color.GREEN)); 
UIManager.getLookAndFeelDefaults().put("ProgressBar[Enabled+Indeterminate].foregroundPainter", new FillPainter(Color.GREEN)); `

after this line

javax.swing.UIManager.setLookAndFeel(info.getClassName());

I've successfully change the color of background. But now the color is "plain", there is no gradient like the orange color.

progress bar
(source: uploadscreenshot.com)

Is it possible to change color with the same effect of the original color?

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Deviling Master
  • 3,033
  • 5
  • 34
  • 59
  • 1
    I think this is a issue with the LaF that you are using. Just a moment, I performing some tests. – davidbuzatto Aug 03 '12 at 20:42
  • @Andrew Thompson from my corner in this world is a SSCCE non_accesible, or my squid_proxy has issue again – mKorbel Aug 03 '12 at 20:46
  • I edited your post here and added code, please revert changes if ..., question could be clear and answerable now – mKorbel Aug 03 '12 at 21:23

2 Answers2

5
  1. maybe (Color and Font) issue talking about Nimbus Look and Feel

  2. have to check this thread

  3. value for

ProgressBar[Disabled+Finished].foregroundPainter ProgressBar[Disabled+Indeterminate].foregroundPainter
ProgressBar[Disabled].backgroundPainter ProgressBar[Disabled].foregroundPainter ProgressBar[Enabled+Finished].foregroundPainter ProgressBar[Enabled+Indeterminate].foregroundPainter ProgressBar[Enabled+Indeterminate].progressPadding ProgressBar[Enabled].backgroundPainter ProgressBar[Enabled].foregroundPainter

. 4. maybe easiest for you will be to change nimbusOrange from the top of Nimbus defaults, but this change is everywhere,

funny output to the GUI with changed Control Color, for example

UIManager.getLookAndFeelDefaults().put("nimbusOrange", (new Color(127, 255, 191)));

. 5. for example

enter image description here

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Graphics2D;
import javax.swing.*;

public class MyPopupWithNimbus {

    public MyPopupWithNimbus() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        JList list = new JList();
        panel.add(list);
        JProgressBar progress = new JProgressBar();
        progress.setStringPainted(true);
        progress.setString("60 pct");
        progress.setValue(60);
        frame.add(panel);
        frame.add(progress, BorderLayout.SOUTH);
        JPopupMenu menu = new JPopupMenu();
        menu.add(new JMenuItem("A"));
        menu.add(new JMenuItem("B"));
        menu.add(new JMenuItem("C"));
        JMenu jmenu = new JMenu("D");
        jmenu.add(new JMenuItem("E"));
        menu.add(jmenu);
        frame.setVisible(true);
        menu.show(frame, 50, 50);
    }

    public static void main(String[] args) {

        try {
            for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(laf.getName())) {
                    UIManager.setLookAndFeel(laf.getClassName());
                    UIManager.getLookAndFeelDefaults().put("nimbusOrange", (new Color(127, 255, 191)));
                    UIManager.getLookAndFeelDefaults().put("PopupMenu[Enabled].backgroundPainter",
                            new FillPainter(Color.ORANGE));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                MyPopupWithNimbus aa = new MyPopupWithNimbus();
            }
        });
    }
}

class FillPainter implements Painter<JComponent> {

    private final Color color;

    FillPainter(Color c) {
        color = c;
    }

    @Override
    public void paint(Graphics2D g, JComponent object, int width, int height) {
        g.setColor(color);
        g.fillRect(0, 0, width - 1, height - 1);
    }
}
Community
  • 1
  • 1
mKorbel
  • 109,525
  • 20
  • 134
  • 319
  • It's a project of Netbeans, how to publish the entire project? – Deviling Master Aug 03 '12 at 21:04
  • Complementing the mKorbel answer, take a look here: http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html – davidbuzatto Aug 03 '12 at 21:27
  • Thanks, now works. I've edited the main post adding the solution and a new question :D – Deviling Master Aug 03 '12 at 22:01
  • yes is possible, but you have to put there GradientPaint or hardiest of ways is to take Arrays of Colors from Nimbus Painter, these value are differents JComponents by JComponents, I'd suggest to change Control Colors, but with impact to the whole Nimbus GUI, are you tried to change only Orange Color, then to try some of inactive background ??? and your GUI will be nice and all JComponents will have got the same Color theme :-), better, safiest and easiest from possible ways :-), much luck – mKorbel Aug 03 '12 at 22:14
  • @mKorbel... Yep! Very very quickier changing directly the base color :D – Deviling Master Aug 03 '12 at 22:28
4

This is what I have done in the application I currently develop

ColorUIResource colorResource = new ColorUIResource(Color.red.darker().darker());
UIManager.put("nimbusOrange",colorResource);

This simply changes the default orange color with something more appealing to the eyes and it changes it everywhere.

Rüdiger Hanke
  • 6,215
  • 2
  • 38
  • 45