|
|
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
всем привет, коллеги, запарился я, где-то что-то "недогоняю". Научите плз. Задача бональная. Нужно проверять содержимое папки и представлять его в виде дерева на панели. При этом "отражение" должно быть актуальным. Проблема в том, что я не пойму - как добится обновления панели: вроде все перепробовал и repaint() и update() и pack() для окна - ничего не помогает. Научите плз. код простой Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. и обнаруживаю, что в окне ничего не происходит. спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2006, 14:52 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
я немного изменил код, для лучшего восприятия. Код: plaintext 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. Проблема решилась небольшим изменением кода: Код: plaintext 1. 2. 3. Мне всегда казалось, что панель сама обновляет включенные в нее компоненты рекурсивным вызовом метода repaint(), однако относительно дерева этого не произошло. Вероятно здесь собака зарыта в другом месте. В принципе - это решение задачи, но я думаю, что существует более элегантный способ. Я был бы искренне признателен за ваше участие в разрешении этого вопроса. с уважением студент ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:15 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
kadet Хм. Относительно Вашего кода - я так и не увидел, где, по-Вашему, должно происходить обновление данных в дереве. Простой пример: допустим, Вы пишете следующий код: Код: plaintext 1. 2. 3. 4. 5. Как по-Вашему, сколько Вам после этого придется ждать обновления вида кнопки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:33 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
[quote] Проблема решилась небольшим изменением кода: this.remove(jTree); jTree = new JTree(dir.list()); this.add(jTree); т.е, я принудительно удалил компонент jTree, создал его заново (специально!, чтобы отразить новое состояние директория ) и добавил на панель. Мне всегда казалось, что панель сама обновляет включенные в нее компоненты рекурсивным вызовом метода repaint(), однако относительно дерева этого не произошло. Вероятно здесь собака зарыта в другом месте. В принципе - это решение задачи, но я думаю, что существует более элегантный способ. [/quote] Метод repaint вызывает перерисовку компонент. При перерисовке компонента отображает данные описываемые её же моделью. У тебя в качестве модели для компонента JTree выступает лист полученный от dir. Cколько не перерисовывай, отображаться будет одно и тоже содержимое. Вместо удаления дерева, достаточно было апдейтить его модель... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:38 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs При перерисовке компонента отображает данные описываемые <b>его</b> же моделью. Кашмар, уже забыл как тут цитаты оформляются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:41 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
softwarer kadet Хм. Относительно Вашего кода - я так и не увидел, где, по-Вашему, должно происходить обновление данных в дереве. Простой пример: допустим, Вы пишете следующий код: Код: plaintext 1. 2. 3. 4. 5. Как по-Вашему, сколько Вам после этого придется ждать обновления вида кнопки? для того чтобы отразить изменения в папке, я вновь создаю дерево с новым содержимым и пытаюсь обновить панель в надежде увидеть изменения jTree=new JTree(dir.list()); я поэтому и "завис", что не могу понять в чем же дело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:46 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs NotGonnaGetUs При перерисовке компонента отображает данные описываемые <b>его</b> же моделью. Кашмар, уже забыл как тут цитаты оформляются :) Вот за это - спасибо, однако метод getModel() класса JTree возвращает только TreeModel, который не имеет методов типа update() или вы имеете ввиду, что разумнее создавать дерево опираясь изначально на модель (читать содержимое каталога и "строить" по нему дерево) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 17:53 |
|
||
|
обновление панели
|
|||
|---|---|---|---|
|
#18+
kadet разумнее создавать дерево опираясь изначально на модель (читать содержимое каталога и "строить" по нему дерево) ? Посмотри на конструктор JTree(TreeModel) и метод JTree#setModel(TreeModel). А потом найди класс DefaultTreeModel. Можно отнаследоваться от этого класса расширив его методом syncronizeModel, который будет обновлять модель в соответствии с изменениями на диске и вызывать перерисовку JTree в случае необходимости. Когда следует дёргать syncronizeModel отдельный вопрос. Читать список файлов с диска при каждом обновлении окна - это накладная операция. Кроме того, окно оставленное в "покое" может долго не обновляться OS, что приведёт к устареванию отображаемой в нём информации. Остаётся либо вариант с таймером, который будет дёргать syncronizeModel, скажем, каждые 5 секунд. Либо прикрутить рядом с твоим деревом кнопку "synch", которая будет делать ровно тоже самое, но только в момент выбранный пользователем (изврат, конечно :)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2006, 18:21 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33569088&tid=2150070]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 246ms |
| total: | 543ms |

| 0 / 0 |
