Цвет UIManager в JFileChooser - PullRequest
       28

Цвет UIManager в JFileChooser

3 голосов
/ 20 июля 2011

Я использую Nimbus Look and Feel, только 3 изменения его цветов:

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

Мой FileChooser выглядит так:

enter image description here

Таким образом, имя выбранного файла отображается белым цветом и выглядит плохо, и это также происходит для типа файла, выбранного в выпадающем списке.Я хочу изменить его на черный, но nimbusSelectedText уже черный и не работает.

Я также посмотрел руководство по умолчанию для Nimbus на http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primary и не вижу параметров в FileChooser или Comboboxчтобы это исправить.

Любая помощь в определении необходимых параметров?Спасибо

Ответы [ 3 ]

2 голосов
/ 20 июля 2011

JFileChooser является составным JComponent , вы можете извлечь JButtons, JToggleButtons и JScrollPane с JViewPort, который содержит JList , пожалуйста, скачайте Darryl's Swing Utils , прочитайте описания, затем запустите код (Darryl), результат - выбор для JList или JTable (я голосовал за это)

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);
    }
} 
1 голос
/ 20 июля 2011

Ну, есть один способ сделать это. Вы можете получить JList из вашего JFileChooser и изменить его:

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
}

и использовать его, просто позвоните getJList():

JFileChooser chooser = new JFileChooser();
getJList(chooser);
1 голос
/ 20 июля 2011

Я действительно не знаю, но вы пытались установить эти свойства:

List.selectionForceground
List.selectionBackground

FileChooser очень похож на список ...


Вторая попытка. Может быть, настройки это помогает:

controlHighlight
controlLHighlight
...