|
|
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726дык я ж его не юзал - говорю, заплакал когда увидел перерисовку всех ячеек таблицы (и видимых, и невидимых) после каждого чиха. Не знаю я, как его переделать... Так что у меня 4 JTable ))) 4 JTable тоже не кузяво... секса с синхронизацией многовато должно быть. Так что надо искать решение. Кстати, нигде не попадались какие-то коммерческие гриды в сорцах? Можно было бы там подглядеть по какому пути они пошли. А что касается перерисовки после каждого чиха - так у меня в приложении есть одна хитропопая таблица, там при отключении всех фильтров и ограничений вылазит >2000 строк, при этом 3 столбца зафиксированы а еще 10 прокручиваются. Основная шиза - ячейки в этих 10 столбцах вычисляемые, причем на каждую ячейку дергается заранее отпрепаренная хранимая процедура на сервере ASA (правда вычисленные значения датасет кэширует, так что попусту два раза одна ячейка сервер не дернет, да и ASA - пацанчик шустренький). Плюс к тому серверная процедура вызывается только для тех ячеек которые на экране умещаются. Так вот, взял я свою дельфишную программу (которую на жабу портирую), там такой же грид, и по секундомеру засек время полной прокрутки грида из начала в конец. Потом с явовской то же самое сделал. Время совпадает с точностью плюс-минус 5 процентов... так что не всё так плохо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 11:08:08 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
есть сырцы JSuite, но там только RowLabel (видимо что-то типа JList) пробовал декомпилять JIDE, но там такая обфускация, что черт ногу сломит. Правда, похоже что также n-ое число гридов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 11:28:12 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov А что касается перерисовки после каждого чиха... По поводу сравнения скоростей - полностью согласен. Отличие от Дельфи - в хранении данных (я вот все думаю - не избавица ли мне от BigDecimal :)) Вот и получается, что при равноценных DataSet жаба выигрывает при перевалирующем кол-ве String полей, а дельфа - числовых. Увы, DataSet обычно больше числовые ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 11:47:18 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726Отличие от Дельфи - в хранении данных (я вот все думаю - не избавица ли мне от BigDecimal :)) Вот и получается, что при равноценных DataSet жаба выигрывает при перевалирующем кол-ве String полей, а дельфа - числовых. Увы, DataSet обычно больше числовые ( Вот я думаю - а не сделать ли типизированные поля, чтоб в зависимости от FieldType пихать значение не в объект а в простой тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 11:59:23 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov alexx726Отличие от Дельфи - в хранении данных (я вот все думаю - не избавица ли мне от BigDecimal :)) Вот и получается, что при равноценных DataSet жаба выигрывает при перевалирующем кол-ве String полей, а дельфа - числовых. Увы, DataSet обычно больше числовые ( Вот я думаю - а не сделать ли типизированные поля, чтоб в зависимости от FieldType пихать значение не в объект а в простой тип. Простые низзя ( я только getObject() пользую), только если репперы. Даже имею галку на DataSet'е. В итоге получаем выигрыш по памяти 1.5-2 раза (даже если Long использовать) Правда, однотипность полей облегчает всяческие проверки и т.д. Но боюсь в результате организации некоего своего черного ящичка ничего хорошего не получица ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 12:38:28 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726 Простые низзя ( я только getObject() пользую), только если репперы. Даже имею галку на DataSet'е. В итоге получаем выигрыш по памяти 1.5-2 раза (даже если Long использовать) Правда, однотипность полей облегчает всяческие проверки и т.д. Но боюсь в результате организации некоего своего черного ящичка ничего хорошего не получица Почему же? Хранить в метаданных поля int который определяет тип данных, и сделать набор перегруженных методов get/set оперирующих простыми типами. Соответственно в самом поле - набор значений разных простых типов. Далее - сравниваем тип поля с ожидаемым в методе, если совпадает - работаем с требуемым значением как с простым типом, а если не совпадает - вытаскиваем значение в соответствии с типом поля и приводим к нужному типу. В большинстве случаев - вызываться будет тот перегруженный get/set который надо, а сравнить 2 инта - по скорости несравненно быстрее чем каждый раз Object туды-сюды кастить... Кстати похоже что относительно лишнего кода в paint ты был абсолютно прав... ну ту модельку я все равно созраню - для небольших табличек самое то что надо, а для жирных и тяжелый - сваяю QuadGrid. Причем он будет создавать внутри своего контейнера переменное количество таблиц в зависимости от FixedColCount/FooterRowCount. Погонял сейчас прототип - всё путем, скорость замечательная. Осталось вложенные заголовки припаять туды и с авторазмерами распахаться... ну еще фильтр и сортировку до кучи, функции в футерах, события OnSelectedRowChanged/OnCellValueChanged/OnEditorNeeded/OnCellRender - и чихать тогда на девэкспресс :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 10:25:37 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov[quot alexx726] Кстати похоже что относительно лишнего кода в paint ты был абсолютно прав... ну ту модельку я все равно созраню - для небольших табличек самое то что надо, а для жирных и тяжелый - сваяю QuadGrid. Причем он будет создавать внутри своего контейнера переменное количество таблиц в зависимости от FixedColCount/FooterRowCount. Погонял сейчас прототип - всё путем, скорость замечательная. Осталось вложенные заголовки припаять туды и с авторазмерами распахаться... ну еще фильтр и сортировку до кучи, функции в футерах, события OnSelectedRowChanged/OnCellValueChanged/OnEditorNeeded/OnCellRender - и чихать тогда на девэкспресс :) Мне к сожалению нельзя делать "здесь играем - там не играем". Я планирую полностью настраиваемый Framework, сериализованный из базы...Варианты конечно могут быть, но от обилия вариаций уже и так крыша трещит:) QuadGrid )) Мы с тобой должны эту фигню запатентовать с таким названием (учитывая абсолютно идентичный способ реализации:)) Меня только бесит, что нет понятия Visible=False. Кстати, когда нарисуешь (думаю, ты это быстро сделаешь - там помощь особая не нужна, главное -терпение), расскажи дураку, как задать preferredSize для scrollPane так, чтобы он менялся в зависимости от наличия scrollBar? А то некрасиво получаца...(сам увидишь в Summary) А вот по поводу этого "очень плохого" механизьма реализации FixedColumns имеет смысл подумать... Ты понял, почему нуно прорисовывать весь Grid? Я понимал так, что ежели мы имеем на руках VisibleRowCount, то все уже не так плохо. Попробовал - ни фига не выходит. Загадочный этот JTable... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 19:54:17 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726 Кстати, когда нарисуешь (думаю, ты это быстро сделаешь - там помощь особая не нужна, главное -терпение), расскажи дураку, как задать preferredSize для scrollPane так, чтобы он менялся в зависимости от наличия scrollBar? А то некрасиво получаца...(сам увидишь в Summary) Что-то я не заметил что там некрасивого такого... можешь скриншот показать? Кстати я наткнулся на другую проблему: есть основная панель с BorderLayout, в ней на южной стороне панель для summary, всё остальное место занимает JSplitpane ну и в summary синхронизированная с ней JSplitpane. Это для того чтоб гриды с фиксированными столбцами ресайзить. Далее, ColumnModel из фиксированной части таблицы присвоен ColumnModel-у фиксированной части Summary (для того чтобы при ресайзе колонок в фиксированных столбцах зацепить ресайзинг Summary). И вот тут фигня начинается - когда авторесайз и у фиксированной части и у ее summary стоит в OFF - синхронизация ресайза колонок пашет нормально но грид естественно не подгоняется под JSplitPane. Ставлю для подгонки под JSplitPane авторесайз по последней колонке фиксированной части - и из-за того что ColumnModel расшарен на два грида таблица начинает страдать дурью... видимо ColumnModel сама себе эвенты кидает и у нее крыша съезжает :) alexx726 А вот по поводу этого "очень плохого" механизьма реализации FixedColumns имеет смысл подумать... Ты понял, почему нуно прорисовывать весь Grid? Я понимал так, что ежели мы имеем на руках VisibleRowCount, то все уже не так плохо. Попробовал - ни фига не выходит. Загадочный этот JTable... Есть у меня подозрение что VisibleRowCount в JScrollPane работает неадекватно. Можно попробовать считать самому исходя из высоты области прокрутки и высоты строки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 20:34:57 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov Что-то я не заметил что там некрасивого такого... можешь скриншот показать? Дык на работе всё. Это у меня на выходных вместо того чтоп спокойно пиво пить, какие-то мысли дурные в голову лезут :) Постараюсь на пальцах. Есть scrollPane, к ней снизу другая scrollPane (я не парился со сплитом - сумммари, он и есть суммари). Ей неплохо бы выставить size (по умолчанию размер ну очень большой). Хорошо, выставляю preferredSize (высоту) как table.getRowHeight()+scrollBar.getHeight(). И все...Когда пропадает горизонтальный scrollBar (при resize), высота fixedScrollPane больше не меняется...Пытался перегрузить getPreferredSize() у scrollPane, но не понимаю - как получить видимость scrollBar (isVisible() не прокатывает). А с resize колонок - это отдельная песня :) Я например аж целых 2 часа догадывался как бы это так сделать, чтобы при resize fixedColumns табличка раздвигалась... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 20:58:38 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
а по по воду VisibleRowCount() ты не понял :) (кстати, а есть такая фича штоле - а я сам считал :(( ) Я пробовал фигачить прорисовку на эту хрень, навешивать какую-то ерунду на selectionChanged(), но без толку...Видимо плохо пытался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2006, 21:03:02 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726 Постараюсь на пальцах. Есть scrollPane, к ней снизу другая scrollPane (я не парился со сплитом - сумммари, он и есть суммари). Ей неплохо бы выставить size (по умолчанию размер ну очень большой). Хорошо, выставляю preferredSize (высоту) как table.getRowHeight()+scrollBar.getHeight(). И все...Когда пропадает горизонтальный scrollBar (при resize), высота fixedScrollPane больше не меняется...Пытался перегрузить getPreferredSize() у scrollPane, но не понимаю - как получить видимость scrollBar (isVisible() не прокатывает). Скроллер в суммари идет лесом. Вот мой код конструктора (кое-где не хватает проверок на нулл, но прототип есть прототип, потом дошлифую) Да, суммари под фиксед я пока оставил в нерабочем состоянии - с синхронизацией при ресайзе уперся в тупик, видимо придется руками писать... Код: 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. alexx726 А с resize колонок - это отдельная песня :) Я например аж целых 2 часа догадывался как бы это так сделать, чтобы при resize fixedColumns табличка раздвигалась... Лобовое решение - использовать сплиты. Кстати руки продолжают чесаться в плане добавления еще двух однострочных гридов сверзу - для запихивания в них комбобоксов фильтра :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2006, 10:10:02 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
Vladimir Kozlov alexx726 А с resize колонок - это отдельная песня :) Я например аж целых 2 часа догадывался как бы это так сделать, чтобы при resize fixedColumns табличка раздвигалась... Лобовое решение - использовать сплиты. А вот нет - достаточно на ComponentListener от fixedColumnsGrid'a (а именно на resize) повесить нехитрый код: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2006, 20:47:20 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
alexx726 А вот нет - достаточно на ComponentListener от fixedColumnsGrid'a (а именно на resize) повесить нехитрый код: Код: plaintext 1. Хм... и хде были мои мозги? За идейку спасибо, попробую (но чуть позже - у меня щас период активных битв с JasperReports). Но вариант с одной таблицей более удобен в плане копипастинга в эксель :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 14:58:17 |
|
||
|
TreeTable - кто каким пользуется?
|
|||
|---|---|---|---|
|
#18+
[quot Vladimir Kozlov] Хм... и хде были мои мозги? За идейку спасибо, попробую (но чуть позже - у меня щас период активных битв с JasperReports). quot] Ага... Jasper...Тоже интересно ) Когда закончишь -отпиши, реально ли перевести готовые достаточно навороченные отчеты (мы вовсю использовали Crystal Reports) на Jasper? Правда, у нас есть главное требование - на входе эта штука может иметь обычный DataSet... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 20:39:19 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34127441&tid=2147507]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
226ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 575ms |

| 0 / 0 |
