我的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。
答案 0 :(得分:0)
好像你想要隐藏JComboBox
的箭头按钮。在Swing体系结构中,这项工作被委托给通过调用Component
方法在updateUI()
ctor上创建的UI类(UI委托)。
当您隐藏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);
}
}
}
}
此外,您可以编写一个隐藏箭头按钮的UI代理:
class ComboUI extends MetalComboBoxUI {
@Override
protected JButton createArrowButton() {
JButton arrowButton = super.createArrowButton();
arrowButton.setVisible(false);
return arrowButton;
}
public static ComponentUI createUI(JComponent c) {
return new ComboUI();
}
}
通过调用JComboBox
方法或通过更新setUI()
JComboBox
的默认设置,将其设置在UIManager
上
UIManager.put("ComboBoxUI", ComboUI.class.getName());
有关Swing MVC和UI代表的更多信息,请参阅http://www.oracle.com/technetwork/java/architecture-142923.html#modified_mvc。