Похоже, вы хотите скрыть кнопку со стрелкой JComboBox
. В архитектуре Swing эта работа делегируется классу UI (делегат UI), который создается на Component
ctor, вызывая метод 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);
}
}
}
}
Также вы могли бы написать делегата 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());
См. http://www.oracle.com/technetwork/java/architecture-142923.html#modified_mvc для получения дополнительной информации о делегатах Swing MVC и UI.
Этот код меняет вид JComboBox, но после второго появляется старый JComboBox. -> выглядит как ошибка в вашем коде – mKorbel
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –