3

I'm using Nimbus Look and Feel, with only 3 changes at its colors:

UIManager.put("nimbusSelection", new Color(164,164,164));
UIManager.put("nimbusSelectionBackground", new Color(214,217,223));
UIManager.put("nimbusSelectedText", Color.BLACK);

My FileChooser looks like this:

enter image description here

So selected file's name appears in white and looks bad, and it also happens for the file type selected at the combobox. I want to change it to Black, but nimbusSelectedText is already black and is not working.

I also had a look at the Nimbus Defaults guide at http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primary and i see no parameter at FileChooser or Combobox to fix this.

Any help identifying the necessary parameters? Thanks

mKorbel
  • 109,525
  • 20
  • 134
  • 319
Roman Rdgz
  • 12,836
  • 41
  • 131
  • 207
  • 2nd. hint http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/ , but I think that required >= JDK1.6.020 – mKorbel Jul 20 '11 at 09:24

3 Answers3

2

JFileChooser is compound JComponent, you can extract JButtons, JToggleButtons and JScrollPane with JViewPort that contains JList, please download Darryl's Swing Utils , read descriptions, then run (Darryl's) code, result is selection for JList or JTable (I voting for that)

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.*;
import javax.swing.plaf.metal.MetalButtonUI;

public class CrazyFileChooser {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new CrazyFileChooser().makeUI();
            }
        });
    }

    public void makeUI() {
        JFileChooser chooser = new JFileChooser();
        for (AbstractButton button : SwingUtils.getDescendantsOfType(AbstractButton.class, chooser)) {
            button.setUI(new XORButtonUI());
        }
        for (JList list : SwingUtils.getDescendantsOfType(JList.class, chooser)) {
            list.setBackground(Color.PINK);
        }
        chooser.showOpenDialog(null);
    }
}

class XORButtonUI extends MetalButtonUI {

    @Override
    public void paint(Graphics g, JComponent c) {
        g.setXORMode(Color.YELLOW);
        super.paint(g, c);
    }
} 
Community
  • 1
  • 1
mKorbel
  • 109,525
  • 20
  • 134
  • 319
1

I really don't know, but have you tried setting this properties:

List.selectionForceground
List.selectionBackground

A FileChooser looks pretty much like a list...


Second try. Maybe settings these helps:

controlHighlight
controlLHighlight
Martijn Courteaux
  • 67,591
  • 47
  • 198
  • 287
1

Well, there is one way possible to do it. You can get the JList from your JFileChooser and modify it:

public boolean getJList(Container c)
{
    Component[] cmps = c.getComponents();
    for (Component cmp : cmps)
    {
        if (cmp instanceof JList)
        {
            modifyJList((JList)cmp);
            return true;
        }
        if (cmp instanceof Container)
        {
            if(getJList((Container) cmp)) return true;
        }
    }
    return false;
}
private void modifyJList(JList list)
{
    // Here you can modify your JList
}

and to use it, just call getJList():

JFileChooser chooser = new JFileChooser();
getJList(chooser);
Eng.Fouad
  • 115,165
  • 71
  • 313
  • 417