Java 更改JComboBox的外观

Java 更改JComboBox的外观,java,swing,jcombobox,custom-component,Java,Swing,Jcombobox,Custom Component,我的Java项目中有以下类 public class ComboBox extends JComboBox { private static final long serialVersionUID = 1L; ComboBox(){ for(Component comp : this.getComponents()){ if(comp instanceof AbstractButton){ comp

我的Java项目中有以下类

    public class ComboBox extends JComboBox {
    private static final long serialVersionUID = 1L;

    ComboBox(){
        for(Component comp : this.getComponents()){
            if(comp instanceof AbstractButton){
                comp.setVisible(false);
            }
        }
    }

    }

这段代码改变了JComboBox的外观,但第二次之后,会出现旧的JComboBox。我的问题是如何不断地重新验证JComboBox。

似乎您想要隐藏
JComboBox的箭头按钮。在Swing体系结构中,这项工作被委托给一个UI类(UI委托),该类是通过调用
updateUI()
方法在
组件上创建的

当您将箭头按钮隐藏在ctor中时,可能会在之后调用
updateUI()
方法

我认为您可以很好地修复代码,删除对
updateUI()
的调用,或者在此时隐藏箭头按钮

例如:

class ComboBox<T> extends JComboBox<T> {
        private static final long serialVersionUID = 1L;

        public ComboBox(){
        }

        @Override
        public void updateUI() {
            super.updateUI();
            hideArrowButton();
        }

        private void hideArrowButton() {
            for(Component comp : this.getComponents()){
                if(comp instanceof AbstractButton){
                    comp.setVisible(false);
                }
            }
        }
    }
并通过调用
setUI()
方法或更新
UIManager

UIManager.put("ComboBoxUI", ComboUI.class.getName());

有关Swing MVC和UI委托的更多信息,请参阅。

此代码更改了JComboBox的外观,但在第二次之后,会出现旧的JComboBox。-->看起来像是你代码中的bug为了更快地获得更好的帮助,请发布一个。谢谢。我还有一个问题。有没有办法删除JComboBox所有组件的边框。例如,类似这样的comp.setboorder(null);
UIManager.put("ComboBoxUI", ComboUI.class.getName());