|
|
|
Перемещение позиции курсора таблицы при использовании JavaFX и MVVM
|
|||
|---|---|---|---|
|
#18+
Ух... Не знал как задать вопрос и сформулировать нему топика, но постараюсь объяснить. Банальная задача - есть сущность "MeasurementType" (тип единиц измерений). Есть диалоговое окно (а вернее таба в TabPane) "Справочник типов единиц измерений". Выглядит оно, как показано на рисунке. Первый опыт использования MVVM, поэтому не судите строго. В окне поля ввода привязываются ко MeasurementTypeViewModel, а таблица к MeasurementTypesViewModel (разница в окончании) . Из БД представлю только одну сущность - MeasurementType. Далее привожу эти классы: MeasurementTypeViewModel: Код: 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. MeasurementTypesViewModel: Код: 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. NewMeasurementTypeController: Код: 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. Небольшие пояснения. Разметку fxml не даю - она не нужна.Контроллер - представляет собой вьюшку (название нелепое - потом исправлю). Два поля привязываются ко MeasurementTypeViewModel. Таблица привязывается к коллекции этих вьюмоделей (к объекту класса MeasurementTypesViewModel). Класс DbHelper тоже не представляю за ненадобностью (работает как положено). Не знаю, получилось может и сумбурно. Если неясно, задавайте вопросы. А теперь моя просьба: - первое и первостепенное - где перемещать курсор в таблице после добавления новой записи (во View или ViewModel) и как это сделать???? - второе - покритикуйте код (что сделал не так? как надо было?) Очень-очень слезно прошу помощи!, комрады!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 12:15 |
|
||
|
Перемещение позиции курсора таблицы при использовании JavaFX и MVVM
|
|||
|---|---|---|---|
|
#18+
NDAleksey - первое и первостепенное - где перемещать курсор в таблице после добавления новой записи (во View или ViewModel) и как это сделать???? ViewModel это бизнес-сущности адаптированная для биндинга. Что такое "курсор в таблице" не очень понятно. Там есть фокус и есть выбранные ячейки. Если удобно selection забиндить на ViewModel, то почему бы и нет? NDAleksey - второе - покритикуйте код (что сделал не так? как надо было?) Если у тебя 2-звенка, то не очень понятно зачем было разделять Model и ViewModel. DbHelper - странное имя класса. Это же не Helper, а Repository. Вызов его из ViewModel настораживает ещё больше. Действия пользователя, вроде как, обрабатывать должен контроллер? Не удачное именование MeasurementTypesViewModel, MeasurementTypeViewModel - имена визуально почти не различимы. MeasurementTypeViewModel - действительно ли нужно столько конструкторов? В случае многократного вызова вроде type.get() и param.getValue() очень не хватает локальной переменной. Для полей контроллера есть удобный компактный формат: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Модификатор private для полей зачастую является просто синтаксическим шумом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 12:41 |
|
||
|
Перемещение позиции курсора таблицы при использовании JavaFX и MVVM
|
|||
|---|---|---|---|
|
#18+
Blazkowicz[\b], спасибо, что Вы ответили!!! Мне это и надо было) BlazkowiczТам есть фокус и есть выбранные ячейки. Если удобно selection забиндить на ViewModel, то почему бы и нет? Именно! Так вот я и спрашиваю как это сделать? У меня щас есть selectRow поле во ViewModel. Оно подвязывается к таблице во вьюшке. Но как переставить выделение в таблице через ViewModel? Подскажите? BlazkowiczЕсли у тебя 2-звенка, то не очень понятно зачем было разделять Model и ViewModel. Да, получается так. Но, я приведу Ваши слова из топика на форуме, которые натолкнули на использование MVVM в моем приложении: авторЭто называется Model-View-ViewModel (MVVM). Model - ваша существующая модель. View - это JavaFX контролы. ViewModel это "обёртка" с биндингами Это первое приложение и хочу хорошо разобраться. У меня есть класс доменного слоя MeasurementType, который я не привел, но упомянул, и использование его видно во вьюмодели в классе выше. У меня есть вьюшка (файл.fxml) + NewMeasurementTypeController, который не смотрите на название является частью вьюшки, где происходит первичная инициализация контролов с биндингом на них полей из классов ViewModel (MeasurementTypeViewModel, MeasurementTypesViewModel). Вот мне и показалось, что я несколько приблизился к реализации MVVM. Если нет, то прошу [b]развернуто , на сколько это возможно, объяснить, что не так. BlazkowiczDbHelper - странное имя класса. Это же не Helper, а Repository. Да, полностью согласен. Вообще дальше нужно будет использовать UnitOfWork. Но это пока) BlazkowiczВызов его из ViewModel настораживает ещё больше. А вот тут не понял совсем. Как так? BlazkowiczДействия пользователя, вроде как, обрабатывать должен контроллер? А разве действия обрабатываются не во ViewModel? Про остальное полностью согласен, но это несколько потом. Хотя ценные замечания. Обязательно учту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 14:26 |
|
||
|
Перемещение позиции курсора таблицы при использовании JavaFX и MVVM
|
|||
|---|---|---|---|
|
#18+
NDAleksey, У TableViewSelectionModel два свйоства. selectedIndex и selectedItem. В чем сложности прибиндить их к модели? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 14:53 |
|
||
|
Перемещение позиции курсора таблицы при использовании JavaFX и MVVM
|
|||
|---|---|---|---|
|
#18+
BlazkowiczNDAleksey, У TableViewSelectionModel два свйоства. selectedIndex и selectedItem. В чем сложности прибиндить их к модели? Сложность в том, что typesTableView.getSelectionModel().selectedIndexProperty() - ReadOnlyProperty и биндить к нему я напрямую не могу. Но смогу прибиндить в Listener-e: Код: java 1. 2. , как я сделал это для selectedItemProperty . Но при таком подходе событие происходит тогда, когда я выделяю строки таблицы мышью, но никак не после нажатия на кнопку добавления. А обработчик кнопки у меня зашит во ViewModel и по паттерну MVVM у меня нет доступа к таблице из ViewModel = ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2015, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2125005]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 377ms |

| 0 / 0 |
