Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Поймать потерю фокуса


Автор: 4eJIoBekMoJIekyJIa 21.11.2008, 03:22
Всем привет, проблема такая. Есть колонка таблицы, в ней в качестве celleditor'a стоит DefaultCellEditor(JComboBox), нужно отловить окончание редактирования, делаю так
Код

group = new JComboBox();
group.setEditable(true);
group.getEditor().addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
            //обработка
    }
});
getJTable().getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(group));

Такое катит, если редактирование заканчивается нажатием ентера, если же просто выделить другую ячейку, программа сюда не заходит(Видимо комбобокс просто лишают фокуса  smile )
Как поймать такое окончание редактирования?

Автор: w1nd 21.11.2008, 12:35
Слушайте сам редактор. См. CellEditorListener

Автор: 4eJIoBekMoJIekyJIa 21.11.2008, 15:10
Цитата
Слушайте сам редактор. См. CellEditorListener 

проблема в том, что мне нужно различать, когда в комбобоксе происходит редактирование элемента, а когда просто выбор другого, если слушать сам celleditor то он не различает эти события, поэтому я и начал слушать комбобокс.

Автор: 4eJIoBekMoJIekyJIa 21.11.2008, 17:53
Решил проблему с помощью :
Код

    group = new JComboBox();
    group.setEditable(true);
    JTextField l = (JTextField)group.getEditor().getEditorComponent();
    l.setInputVerifier(new ComboInputVerifier());

Всем Спасибо. smile 

Автор: 4eJIoBekMoJIekyJIa 21.11.2008, 22:09
Нет, не решил)
Осталось то же самое, не различается выбор элемента из списка, и изменение smile 
какие идеи?

Автор: 4eJIoBekMoJIekyJIa 25.11.2008, 19:15
Сделал через
Код

comboBox.getEditor().getEditorComponent().addKeyListener()


Немного кривовато, т.к вызывается при каждом нажатии клавиши, но зато работает

Автор: 4EJIOBEK 1.12.2008, 15:30
Как насчет?    
Код


    JComboBox jcBox= new JComboBox();
    jcBox.getModel().addListDataListener(new ListDataListener(){
       public void intervalAdded(ListDataEvent e){}

       public void intervalRemoved(ListDataEvent e){}

       public void contentsChanged(ListDataEvent e){
           System.out.println("Content changed");
       }
    });

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)