Пыха всегда с тобой

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 26 Май, 2012, 02:37:53

Страниц: [1]
Печать
Автор Тема: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры?  (Прочитано 1844 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Rotten    ↓ 
30 Ноябрь, 2009, 12:16:59
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

Я много наэксперементировался, в книжке автор примера толком не указал...Да и вообще меня волнует особенность данного объекта.
Кручу сначала к нему FocusListener - и при потере/гэйне фокуса - ноль на масу. Кручу Кей листенер - тоже, ничерта не хочет реагировать.
НО - если даю ItemListener, и при itemStateChanged - опа, - и "жизнь на марсе обнаруживается". Еще бі, чтобі не реагировать на изминения єлементов, это было бы совсем непонятно.
Но мне надо при редактируемому Комбобоксе(когда есть возможность печатать/изменять элементы) - реагировать на события нажиманий клавиш...
Я обнаружил в самом JComboBox, в принципе есть немало методо....в т.ч. и свой actionPerfomed....
Подскажите, каким можно способом прикрутить данный обработчик?....возможно нужно както связать его в свою очередь и через КейЛистенер?
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 12:33:15 , спустя 16 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

в чем трабла?
 
Java

public class FocusEventDemo extends JFrame
 implements FocusListener {
 
public FocusEventDemo() {
    JComboBox comboBox = new JComboBox(/**/);
    comboBox.addFocusListener(this);
    add(comboBox);
}
 
public void focusGained(FocusEvent e) {
    System.out.println("Focus gained");
}
 
public void focusLost(FocusEvent e) {
     System.out.println("Focus lost");
}
 
}
 
« Последнее редактирование: 30 Ноябрь, 2009, 12:33:15 от CTAPbIu_MABP » Записан

java.lang.OutOfMemoryError
Rotten    ↓ 
30 Ноябрь, 2009, 12:41:32 , спустя 8 минут 17 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

CTAPbIu_MABP, я этот пример кстати применял уже на своем)...
Но в моем селекте на фокус чето не реагирует. гдето в книге вычитал, что мол нужно еще определять родительский компонент, в котором элемент формы владеет фокусом....
типа
Java
KeyboardFocusManager m = KeyboardFocusManager.getCurrentKeyboardFocusManager();
            Component o = m.getFocusOwner();
            Window focused = m.getFocusedWindow();
Но даже если так, то где использовать результативные переменные - хер знает...
Но не в фокусе дело...Хоть мне и более важен KeyListener, но всеравно не могу понять почему мой комбо игнорит обработчика?
Java
final JComboBox SearchCombo = new JComboBox();
Box vb = Box.createVerticalBox();
           
            b.add(new JLabel("Find:"));
            b.add(Box.createHorizontalStrut(80));
           
            b.add(SearchCombo);
SearchCombo.setEditable(true);
    class onKeyHitSearchCombo extends KeyAdapter
            {
       
       
                public void keyReleased(KeyEvent event)
                {
                   
                                     System.out.println("released.");
                   
                }
            }   
 
SearchCombo.addKeyListener(new onKeyHitSearchCombo());
...
 

 
фокус тоже проделывал, но та же история.
Я думаю, что там нужно вытворить какоето дополнительное шаманство для применений обработчиков когда комбо в режиме едитабл....
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 12:59:32 , спустя 18 минут
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

http://java.sun.com/docs/books/tutorial/uiswing/examples/events/FocusEventDemoProject/src/events/FocusEventDemo.java
 
у меня все работает
 


* untitled.JPG (47.97 Кб, 453x455 - просмотрено 126 раз.)
Записан

java.lang.OutOfMemoryError
Rotten    ↓ 
30 Ноябрь, 2009, 01:06:15 , спустя 6 минут 43 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

ок, значит у меня гдето там еще ошибка завалялась....
меньше с тем...
Меня вот что интересует - когда коббобокс - едитабельный, он себя автоматически ведет как текстФилд, например? Тоесть ненужно дополнительно для бокса вызывать какихто методов или чтото в том роде, чтобы  он смог применять все те же обработчики что и тот же филд, текстарея и другие?
 
Я например смотрю в доку...там есть для бокса какойто странный метод processKeyEvent (KeyEvent e), то он на табулятор регирует(так описано). Мне кажется это совсем не то...
 
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 01:23:59 , спустя 17 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Rotten, зафигач сюда свой код и скажи что ы хочешь чтоб он делал
Записан

java.lang.OutOfMemoryError
Rotten    ↓ 
30 Ноябрь, 2009, 01:54:36 , спустя 30 минут 37 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

ок... будем делать, как говорит мой шеф - "в лоб")...
Итак, навожу код. код, касающийся верстки/компоновок вписивать не буду, тут он не нужен - т.к. тема не та).
Java

final JComboBox SearchCombo = new JComboBox();
 
SearchCombo.setEditable(true);
 
final JButton OKButton = new JButton("OK");
 

 
        class onKeyHitSearchCombo extends KeyAdapter
                        {
               
               
                                public void keyReleased(KeyEvent event)
                                {
                                       
                                     try{
                        String s = (String)SearchCombo.getSelectedItem();
                        //System.out.println(s);
                        boolean enabled = (s.isEmpty() || s == null) ? false : true;// можно и по s.lenth == 0, думаю нету разницы
                        OKButton.setEnabled(enabled);
                        //System.out.println(enabled);
                       
                    }
                        catch(NullPointerException e){
                            OKButton.setEnabled(false);
                    }
                                       
                                }
                        }       
 
SearchCombo.addKeyListener(new onKeyHitSearchCombo());

думаю тут и комментариев не надо.... Хотя на всяк лишний скажу: когда я пишу в в боксе значение, мне надо чтобы , подобно, например Текстфилду КейЛистенер выслежывал состояния комбобокса. И когда поле пустое или зануленное - тогда нужно деактивировать кнопку "Ок", а в обратном случае - активировать...
Проблема: метод keyReleased данного листенера вообще не вызывается...
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
phpdude    ↓ 
30 Ноябрь, 2009, 01:58:14 , спустя 3 минуты 38 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 345
Сообщений: д-о-х-у-я!
Сила слова: 1.66

Rotten,
Итак, навожу код. код, касающийся верстки
ты как ведьма говоришь ... НАВОЖУ ПОРЧУ ))))))
Записан

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 02:17:05 , спустя 18 минут 51 секунду
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Java
package ua.kiev.mabp;
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
public class FocusEventDemo extends JFrame {
    final static String newline = "\n";
    JTextArea display;
 
    public FocusEventDemo(String name) {
        super(name);
    }
 
    public void addComponentsToPane(final Container pane) {
 
        final JComboBox searchCombo = new JComboBox();
        searchCombo.setEditable(true);
        final JButton okButton = new JButton("OK");
 
        searchCombo.getEditor().getEditorComponent().addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {
                System.out.print("keyTyped");
            }
 
            public void keyPressed(KeyEvent e) {
                System.out.print("keyPressed");
            }
 
            public void keyReleased(KeyEvent e) {
                System.out.print("keyReleased");
                try {
                    String s = (String) searchCombo.getSelectedItem();
                    boolean enabled = (!(s.isEmpty() || s == null));
                    okButton.setEnabled(enabled);
                }
                catch (NullPointerException npe) {
                    okButton.setEnabled(false);
                }
            }
        });
        add(searchCombo);
        add(okButton);
       
        pane.setLayout(new GridBagLayout());
        setPreferredSize(new Dimension(450, 450));
        ((JPanel) pane).setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
    }
 
    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                FocusEventDemo frame = new FocusEventDemo("FocusEventDemo");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.addComponentsToPane(frame.getContentPane());
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
 
 

магия
Записан

java.lang.OutOfMemoryError
Rotten    ↓ 
30 Ноябрь, 2009, 02:17:52 , спустя 47 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

а че странного)))) так же....девелопинг без порчи и шаманства(не говоря о галлонах кофе или енержи дринков(для кого - что), курения травы для энтузиастов) - это уже не девелопинг, а безвкусное и халатное отбывание очереди хер знает зачем))....
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
Rotten    ↓ 
30 Ноябрь, 2009, 02:25:53 , спустя 8 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

CTAPbIu_MABP,
Java
searchCombo.getEditor().getEditorComponent().addKeyListener(KeyListener k)
Во-во...я за это и спрашивал))... Я догадывлся что надо применить чтото дополнительное в этом случае...только что именно - под вопросом.
Мавр, ты какую книгу(книги) по джаве читал), если можно поинтересоваться? Я пока Хортсмана 1й том.
Довольно внятно и интерессно, но только по основам. 2я - больше для создания профессиональных проектов написана. Но я втыкнул в сожержание, и мне показалось что там напротив - слишком много воды, которая нужна для разработки каких то мало востребованных вещей. Пока что нашел интерессное там - так это работа с базами данных. пока на очереде.
.....Спасибо за просветление в магии)
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 03:21:05 , спустя 55 минут 12 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

Во-во...я за это и спрашивал))
нет ты спрашивал про фокус, фокус получает searchCombo
 

Мавр, ты какую книгу(книги) по джаве читал)
букварь, вторую и синюю
я уже гдето советовал Thinking in Java и серия [Spring,Hibernate,...] in Action
Записан

java.lang.OutOfMemoryError
Rotten    ↓ 
30 Ноябрь, 2009, 03:31:46 , спустя 10 минут 41 секунду
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 9
Сообщений: 2088
Сила слова: 0.43

нет ты спрашивал про фокус, фокус получает searchCombo
Вообщемто я писал вот это
Я думаю, что там нужно вытворить какоето дополнительное шаманство для применений обработчиков когда комбо в режиме едитабл
А касательно фокуса - я не имел ввиду конкретно его...Просто сказал что он тоже не реагирует...
Записан

Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
adw0rd    ↓ 
30 Ноябрь, 2009, 03:58:22 , спустя 26 минут 36 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67


 
Мавр, ты какую книгу(книги) по джаве читал)
букварь, вторую и синюю
я уже гдето советовал Thinking in Java и серия [Spring,Hibernate,...] in Action
http://pyha.ru/forum/topic/1198.0
Записан

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Страниц: [1]
Печать
 

Перейти в: