Как убрать функциональность JComboBox "щелкни и посмотри"?

У меня есть JComboBox, который использует GlazedLists для добавления функциональности опережающего ввода. Я хочу, чтобы пользователь набрал строку и увидел опережающий ввод (это работает благодаря Glazedlists). Однако я не хочу, чтобы пользователи могли щелкать стрелку вниз в выпадающем списке и просматривать раскрывающийся список. Я сделал стрелку вниз невидимой и сделал выпадающий список редактируемым, чтобы он напоминал JTextField. Однако вы все еще можете навести указатель мыши на область, где раньше была стрелка вниз, и щелкнуть ее. Это приводит к появлению выпадающего списка. Что я изменяю или какие методы переопределяю, чтобы удалить функцию "нажми и получи".

ComboBox<String> box = new ComboBox<String>();
box.setEditable(true);
box.setUI(new BasicComboBoxUI(){ // make the down arrow invisible
    protected JButton createArrowButton() {
       return new JButton() {
           public int getWidth() {
               return 0;
           }
       };
    }
});

SwingUtilities.invokeLater(new Runnable(){
     public void run(){
         Object[] elements = new Object[] {"java", "perl", "python", "haskell", "erlang", "groovy"};
         AutoCompleteSupport.install(box, GlazedLists.eventListOf(elements));       
     }
});

1 ответ

Решение

Override JButton#addMouseListener:

JComboBox<String> box = new JComboBox<>();
box.setEditable(true);
box.setUI(new BasicComboBoxUI() { // make the down arrow invisible
    protected JButton createArrowButton() {
        return new JButton() {
            public int getWidth() {
                return 0;
            }

            @Override
            public synchronized void addMouseListener(MouseListener l) {
            }
        };
    }
});
Другие вопросы по тегам