java - 自定义JFileChooser : FileFilters lost

标签 java swing jfilechooser filefilter

我最终使用 Eng. 的方法在 JFileChooser 的 JList 和 JComboBoxes 中自定义了选择颜色。福阿德建议here

public void customizeJFileChooser(Container c)
    {
        Component[] cmps = c.getComponents();
        for (Component cmp : cmps)
        {
            if (cmp instanceof JList)
            {
                ((JList)cmp).setSelectionBackground(new Color(164,164,164));
            }
            if (cmp instanceof JComboBox)
            {
                ((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() {
                    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                        Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                        if (isSelected)
                        comp.setBackground(new Color(164,164,164));
                        return comp;
                        }
                        });
            }
            if (cmp instanceof Container)
            {
                customizeJFileChooser((Container) cmp);
            }
        }
    }

对于颜色效果很好,但是...现在我对 FileFilter 名称有问题,如您在上面看到的:

How it looks, and how I should look (and looked before changing the colors)

如果我不调用customizeJFileChooser,它就会得到正确的名称,所以它一定是该方法的问题。有什么帮助吗?

最佳答案

ListCellRenderer 很可能不仅仅是一个 DefaultListCellRenderer,而是一个派生类。 因此,解决方案是获取原件并将其包装,而不是替换它。

        if (cmp instanceof JComboBox)
        {
            ((JComboBox)cmp).setRenderer(new DefaultListCellRenderer() {
                private ListCellRenderer superLCR = ((JComboBox)cmp).getRenderer();
                public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
                    Component comp = superLCR.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                    if (isSelected)
                        comp.setBackground(new Color(164,164,164));
                    return comp;
                }
            });
        }

关于java - 自定义JFileChooser : FileFilters lost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6858494/

相关文章:

java - JFileChooser 不遵循外观

java - 如何在 google map v2 for android 中显示标记旁边的文本

java - 创建 java swing 专辑

java - android和php之间的非对称加密

java - 我如何在我的小程序中使用 JXMapViewer?

java - JFrame 类型的方法...未定义

java - meteor 和java应用程序数据推送

java - 通过不同的线程访问变量和 Swing 组件

java - 有没有办法以编程方式从 JFileChooser.showOpenDialog() 返回?

java - 文件选择器问题