3

私はニンバスのルックアンドフィールを使用していますが、色が3つだけ変更されています。

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

私のFileChooserは次のようになります。

ここに画像の説明を入力してください

そのため、選択したファイルの名前は白で表示され、見栄えが悪くなります。また、コンボボックスで選択したファイルタイプでも発生します。黒に変更したいのですが、nimbusSelectedTextはすでに黒で、機能していません。

また、 http: //download.oracle.com/javase/tutorial/uiswing/lookandfeel/_nimbusDefaults.html#primaryにあるNimbus Defaultsガイドも確認しましたが、FileChooserまたはComboboxにこれを修正するためのパラメーターがありません。

必要なパラメータを特定するのに役立ちますか?ありがとう

4

3 に答える 3

2

JFileChooserは複合JComponentであり、 JList を含む JViewPort を使用して JScrollPane をJButtons抽出JToggleButtonsできます。Darryl の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);
    }
} 
于 2011-07-20T08:20:26.800 に答える
1

本当にわかりませんが、このプロパティを設定してみましたか:

List.selectionForceground
List.selectionBackground

FileChooser はリストのように見えます...


2 回目の試行。たぶん、これらの設定が役立ちます:

controlHighlight
controlLHighlight
于 2011-07-20T08:13:50.960 に答える
1

まあ、それを行うことができる1つの方法があります。JFileChooser から JList を取得して変更できます。

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);
于 2011-07-20T08:16:05.733 に答える