Java 更改JComboBox的外观
我的Java项目中有以下类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
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());