|
|
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
Добрый день! Не знаю правильно-ли сформулировал тему, но прошу понять-простить, если сломал вам моск)) Смысл следующий: 1. Есть Дерево (JTree) и текстовое поле (JTextField) 2. Есть событие выбора (addTreeSelectionListener) нода (node) на дереве, где из него достается UserObject и мапится на текстовое поле 3. В текстовом поле отображается UserObject нода и там-же его можно редактировать. 4. Событие при котором информация с текстового поля кладется в ноду называется LostFocus, а обработчик соответственно назначен на текстовое поле. 5. Так вот если уйти с текстового поля (потерять фокус) на любой другой элемент кроме самого дерева, то нормально, а если уйти с текстового поля на дерево, то почему то сначала сработает событие выбора нода на дереве, а потом только LostFocus на текс. поле, что кардинально меняет ситуацию и результат. Итого: Нужно при тыкании на дерево сначала обработать событие потери фокуса на текстовом поле, что инфа положилась в ноду, а только потом обрабатывать событие выбора нового нода и соответственно мапить с него инфу на текст. поле. Как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:13 |
|
||
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Да, всё просто вроде. Перед тем как текстовому полю задать новый UserObject, надо убедиться, что текстовое значение в старый сохранено. Подсистемы фокуса и выбора очень разные. Поэтому рассчитывать на их синхронизацию никак нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:33 |
|
||
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Ну можно ещё грязный трюк с invokeLater провернуть. То есть в TreeSelectionListener ваше "достается UserObject и мапится на текстовое поле" выполнять не сразу, а поместить в EventQueue через invokeLater. Тогда все остальные события UI в очереди обработаются и только после этого запуститься процесс обновления поля. Но я бы не рекомендовал так делать. Уж очень оно не надежно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:35 |
|
||
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Кстати. По факту вы изобретаете свой TreeCellEditor. Можно попробовать просто переопределить layout и поместить editingComponent в нужную вам позицию. Либо, если за пределами дерева отрисовать не выйдет, то просто связать TreeCellEditor.editingComponent с вашим JTextField. Хотя "просто" здесь по факту не так уж и "просто". Ещё можно переопределить TreeSelectionModel и там контролировать вызов TreeSelectionListener. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:47 |
|
||
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
AndronovMV, Фокусом занимается операционка, и очередность верная. Т.е. возможно баг компонента. Но, действительно, зачем вам потеря фокуса? Попробуйте вобще без него. Оно специфичное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 10:54 |
|
||
|
Очередь обработки событий
|
|||
|---|---|---|---|
|
#18+
Забыл указать, что JTree и JTextField изолированны друг от друга, т.е. они работаю через посредника и друг о друге ничего не знают. типа: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Если коротко, то реализован некий DataSet, в котором помимо функционала для работы с данными БД сделал перегруженные методы bind. Код: java 1. 2. 3. 4. 5. 6. вот в них и заключен код по работе с контролами и как видите контролы не видят друг друга. Вот примерно так все это вызывается: Код: java 1. 2. 3. 4. 5. Я пробовал с invokeLater, там после нескольких тыканий по нодам дерева начинается "светомузыка" в jTree. Сейчас чуть изменил код с тем же invokeLater, вроде стал работать нормально: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2016, 11:11 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39198548&tid=2124246]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 372ms |

| 0 / 0 |
