|
Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 12:16:59 Я много наэксперементировался, в книжке автор примера толком не указал...Да и вообще меня волнует особенность данного объекта.
Кручу сначала к нему FocusListener - и при потере/гэйне фокуса - ноль на масу. Кручу Кей листенер - тоже, ничерта не хочет реагировать. НО - если даю ItemListener, и при itemStateChanged - опа, - и "жизнь на марсе обнаруживается". Еще бі, чтобі не реагировать на изминения єлементов, это было бы совсем непонятно. Но мне надо при редактируемому Комбобоксе(когда есть возможность печатать/изменять элементы) - реагировать на события нажиманий клавиш... Я обнаружил в самом JComboBox, в принципе есть немало методо....в т.ч. и свой actionPerfomed.... Подскажите, каким можно способом прикрутить данный обработчик?....возможно нужно както связать его в свою очередь и через КейЛистенер? Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: CTAPbIu_MABP от 30 Ноябрь, 2009, 12:33:15 в чем трабла?
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"); } } Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 12:41:32 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()); ... фокус тоже проделывал, но та же история. Я думаю, что там нужно вытворить какоето дополнительное шаманство для применений обработчиков когда комбо в режиме едитабл.... Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: CTAPbIu_MABP от 30 Ноябрь, 2009, 12:59:32 http://java.sun.com/docs/books/tutorial/uiswing/examples/events/FocusEventDemoProject/src/events/FocusEventDemo.java
у меня все работает Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 01:06:15 ок, значит у меня гдето там еще ошибка завалялась....
меньше с тем... Меня вот что интересует - когда коббобокс - едитабельный, он себя автоматически ведет как текстФилд, например? Тоесть ненужно дополнительно для бокса вызывать какихто методов или чтото в том роде, чтобы он смог применять все те же обработчики что и тот же филд, текстарея и другие? Я например смотрю в доку...там есть для бокса какойто странный метод processKeyEvent (KeyEvent e), то он на табулятор регирует(так описано). Мне кажется это совсем не то... Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: CTAPbIu_MABP от 30 Ноябрь, 2009, 01:23:59 Rotten, зафигач сюда свой код и скажи что ы хочешь чтоб он делал
Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 01:54:36 ок... будем делать, как говорит мой шеф - "в лоб")...
Итак, навожу код. код, касающийся верстки/компоновок вписивать не буду, тут он не нужен - т.к. тема не та). 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 данного листенера вообще не вызывается... Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: phpdude от 30 Ноябрь, 2009, 01:58:14 Rotten,
Итак, навожу код. код, касающийся версткиты как ведьма говоришь ... НАВОЖУ ПОРЧУ )))))) Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: CTAPbIu_MABP от 30 Ноябрь, 2009, 02:17:05 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); } }); } } магия Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 02:17:52 а че странного)))) так же....девелопинг без порчи и шаманства(не говоря о галлонах кофе или енержи дринков(для кого - что), курения травы для энтузиастов) - это уже не девелопинг, а безвкусное и халатное отбывание очереди хер знает зачем))....
Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 02:25:53 CTAPbIu_MABP,
Во-во...я за это и спрашивал))... Я догадывлся что надо применить чтото дополнительное в этом случае...только что именно - под вопросом. Мавр, ты какую книгу(книги) по джаве читал), если можно поинтересоваться? Я пока Хортсмана 1й том. Довольно внятно и интерессно, но только по основам. 2я - больше для создания профессиональных проектов написана. Но я втыкнул в сожержание, и мне показалось что там напротив - слишком много воды, которая нужна для разработки каких то мало востребованных вещей. Пока что нашел интерессное там - так это работа с базами данных. пока на очереде. .....Спасибо за просветление в магии) Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: CTAPbIu_MABP от 30 Ноябрь, 2009, 03:21:05 Во-во...я за это и спрашивал))нет ты спрашивал про фокус, фокус получает searchCombo Мавр, ты какую книгу(книги) по джаве читал)букварь, вторую и синюю я уже гдето советовал Thinking in Java и серия [Spring,Hibernate,...] in Action Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: Rotten от 30 Ноябрь, 2009, 03:31:46 нет ты спрашивал про фокус, фокус получает searchComboВообщемто я писал вот это Я думаю, что там нужно вытворить какоето дополнительное шаманство для применений обработчиков когда комбо в режиме едитаблА касательно фокуса - я не имел ввиду конкретно его...Просто сказал что он тоже не реагирует... Название: Почему редактируемый JComboBox не реагирует на прикрученные к нему хендлеры? Отправлено: adw0rd от 30 Ноябрь, 2009, 03:58:22 http://pyha.ru/forum/topic/1198.0 |