JComboBox comboBox = new JComboBox();
comboBox.setUI(new BasicComboBoxUI() {
@Override
protected JButton createArrowButton() {
return new JButton() {
@Override
public int getWidth() {
return 0;
}
};
}
});
Le fait que getWidth() renvoie 0 permet de s'en assurer :
a) le bouton n'est pas affiché
b) aucun espace n'est réservé à cet effet, ce qui vous permet de taper dans tout le champ.
J'ai découvert que je devais invoquer .setUI()
via SwingUtilities.invokeLater()
mais selon la structure de votre code, vous n'aurez peut-être pas à le faire.
Si vous souhaitez une saisie semi-automatique, ajoutez des éléments à la liste déroulante et utilisez la fonction AutoCompleteDecorator.decorate(comboBox)
. Les AutoCompleteDecorator
fait partie de la classe SwingX comme indiqué précédemment.
Cela peut donner un aspect bizarre à votre boîte lorsque vous utilisez un autre L&F, et vous devrez donc choisir quelle CombiBoxUI instancier, pour obtenir le bon aspect.
Si vous ne souhaitez pas que la liste déroulante apparaisse lorsque la boîte combo ne contient rien, remplacez également cette méthode dans la BasicComboBoxUI :
@Override
public void setPopupVisible(JComboBox c, boolean v) {
// keeps the popup from coming down if there's nothing in the combo box
if (c.getItemCount() > 0) {
super.setPopupVisible(c, v);
}
}