JComboBox comboBox = new JComboBox();
comboBox.setUI(new BasicComboBoxUI() {
@Override
protected JButton createArrowButton() {
return new JButton() {
@Override
public int getWidth() {
return 0;
}
};
}
});
Выполнение getWidth (), возвращающее 0, гарантирует, что:
а) кнопка не отображается
б) для него не зарезервировано место, что позволяет вводить все поле
Я обнаружил, что должен был вызвать .setUI()
через SwingUtilities.invokeLater()
, но, в зависимости от структуры вашего кода, вам может и не понадобиться.
Если вы хотите автозаполнение, добавьте некоторые элементы в поле со списком и используйте AutoCompleteDecorator.decorate(comboBox)
. Класс AutoCompleteDecorator
является частью SwingX , как упоминалось ранее.
Это может сделать ваш бокс странным при использовании другого L & F, поэтому вам придется выбрать, какой CombiBoxUI создать, чтобы получить правильный вид.
Если вы не хотите, чтобы раскрывающийся список появлялся, когда в поле со списком ничего нет, переопределите этот метод также в 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);
}
}