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

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

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

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

Новости

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

Краснодарское время: 11 Февраль, 2012, 04:58:21

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

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

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

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

When some kind of technology becomes a religion...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 12:33:15 , спустя 16 минут 16 секунд
НЕ ХУЕТА! ХУЕТА!

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

Карма: не нужна
Сообщений: 5184
Сила слова: 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
Сообщений: 1911
Сила слова: 0.47

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());
...
 

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

When some kind of technology becomes a religion...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 12:59:32 , спустя 18 минут
НЕ ХУЕТА! ХУЕТА!

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

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

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


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

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

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

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

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

When some kind of technology becomes a religion...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 01:23:59 , спустя 17 минут 44 секунды
НЕ ХУЕТА! ХУЕТА!

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

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

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

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

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

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

ок... будем делать, как говорит мой шеф - "в лоб")...
Итак, навожу код. код, касающийся верстки/компоновок вписивать не буду, тут он не нужен - т.к. тема не та).
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 данного листенера вообще не вызывается...
Записан

When some kind of technology becomes a religion...
phpdude    ↓ 
30 Ноябрь, 2009, 01:58:14 , спустя 3 минуты 38 секунд
НЕ ХУЕТА! ХУЕТА!

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

Карма: 339
Сообщений: 19718
Сила слова: 1.72

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

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

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

Карма: не нужна
Сообщений: 5184
Сила слова: 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
Сообщений: 1911
Сила слова: 0.47

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

When some kind of technology becomes a religion...
Rotten    ↓ 
30 Ноябрь, 2009, 02:25:53 , спустя 8 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!

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

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

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

When some kind of technology becomes a religion...
CTAPbIu_MABP    ↓ 
30 Ноябрь, 2009, 03:21:05 , спустя 55 минут 12 секунд
НЕ ХУЕТА! ХУЕТА!

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

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

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

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

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

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

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

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

When some kind of technology becomes a religion...
adw0rd    ↓ 
30 Ноябрь, 2009, 03:58:22 , спустя 26 минут 36 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: Санитары

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


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

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

Перейти в: