|
|
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Есть небольшая программа - по клику на JPanel на нее добавляются кнопки заданного размера и отображается количество уже добавленных кнопок. Класс MainFrame - код основного окна, сделанный с помощью JFormDesigner Код: 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. 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. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. И класс MouseListener: Код: 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. Проблема вот в чем - если в методе updateCount() изменить надпись на JLabel с помощью setText, происходит следующее: Если же закомментировать этот момент, то все в порядке: Тоже самое происходит, если изменить вручную размеры окна. Изучив гугл, пришел к выводу, что это происходит из-за метода updateUI(), который, видимо, вызывается автоматически. Если его вызвать вручную - проблема повторяется. Подскажите, в какую сторону вообще копать? Виноват компоновщик или еще что-то? И сразу второй вопрос - при добавлении этих самых кнопок по клику заметил, что событие не всегда срабатывает - если кликать быстро, то вообще ничего не добавляется. Если убрать repaint() - задержка вообще почти всегда. С чем это связано? Заранее спасибо за любое объяснение\статьи и прочее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2015, 13:38 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Код: java 1. Это необходимо для ручного позиционирования. Так как по-умолчанию используется FlowLayout. Из-за этого все проблемы. Потому что Layout manager не использует те Bounds что вы устанавливаете. Он используется PreferredSize. А Bounds устанавливает сам. Забудьте про repaint() и updateUI(). Это рудименты, в которые новички постоянно утыкаются при борьбе с layout manager. updateUI() относится к LookAndFeel. Класс отвечающий за отрисовку контрола в LAF имеет суффикс UI. Вот updateUI обновляет этот объект отрисовки привязанный к контролу. repaint() не помню что именно там делает, но тоже не предназначен для ручного вызова из кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2015, 13:54 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, огромное спасибо! А что по поводу лагов GUI? Это все Swing & потоки, в этом направлении разбираться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2015, 19:12 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Slavuti4Blazkowicz, огромное спасибо! А что по поводу лагов GUI? Это все Swing & потоки, в этом направлении разбираться? В чем конкретно лаги? Если updateUI и repaint убрать то и лагов не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2015, 20:26 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, когда быстро щелкаешь ЛКМ/ПКМ - кнопка не добавляется, либо вместо 2-3 добавляется всего 1. Даже в консоли пишет, что кнопка добавилась (отработал слушатель), цифра через setText изменилась, а кнопки нет. Либо кнопка добавляется с заметным запаздыванием. При быстрых кликах вообще ничего не происходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2015, 20:43 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Slavuti4Blazkowicz, когда быстро щелкаешь ЛКМ/ПКМ - кнопка не добавляется, либо вместо 2-3 добавляется всего 1. Даже в консоли пишет, что кнопка добавилась (отработал слушатель), цифра через setText изменилась, а кнопки нет. Либо кнопка добавляется с заметным запаздыванием. При быстрых кликах вообще ничего не происходит Много быстрых нажатий система воспринимает как double и даже triple click. MouseEvent.getClickCount(). Хочу так же отметить, что Swing это фреймверк для создания GUI. Делать на него основе какую-то "игру" это использовать его не по назначению. Конечно, будет намного быстрее если выкинуть контролы и вместо них реализовать свою модель с прямым отображением в Java2D. Ещё достаточно странно что для вашей задачи вы выбрали Swing, а не JavaFX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 09:41 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
А есть у кого-то образец JavaFX проекта с гридами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 12:43 |
|
||
|
Проблема с обновлением JPanel
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, большое спасибо, проблема решилась заменой mouseClicked() на mousePressed(). Swing использую просто для того, чтобы детально разобраться, как все работает, потом переделаю на чем-нибудь более современном :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2015, 12:56 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2125753]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
169ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 471ms |

| 0 / 0 |
