|
|
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
Собственно, задача: делается класс "список, фильтруемый по вводимому значению". То есть пользователь жмет в textfield-е на кнопки, и содержимое jlist-а бодро сжимается, оставляя только строки, соответствующие маске. Для этого делается наследник JList, который внутри себя создает панельку и скролл для саморазмещения, textfield фильтра, размещенный на той же панельке итп. Итого - получается объект, которым в любом месте можно заменить JList исправлением одной-двух строк. Для осуществления собственно фильтрации создается внутренняя ListModel, фильтрующая первичную модель листбокса. Соответственно, до пятой версии работал примерно следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. В пятой версии этот код, соответственно, перестает работать, ругаясь на невозможность слишком раннего обращения к this. Вопрос: существует ли какое-либо красивое решение в такой ситуации? Я пока что остановился на варианте Код: plaintext 1. 2. 3. 4. но хочется чего-то менее уродского. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 12:51 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
может setModel() переопределить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 13:26 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
авторВ пятой версии этот код, соответственно, перестает работать, ругаясь на невозможность слишком раннего обращения к this. Проверил в 1.4 - компилятор тоже по рукам за подобные шутки выдает. И правильно делает. Можно сделать фабричный метод. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Хотя по-большому счету те же яйца, вид сбоку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 13:50 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
funikovyuriможет setModel() переопределить? Дык само собой, переопределено, через тот же makeFilterModel - поэтому вариант, на котором я пока остановился, и работает :) Вопрос в том, что во-первых не хочется понижать функциональность класса; если у предка есть конструктор с моделью, то и у потомка должен быть такой же, пока это имеет смысл. А во-вторых, из эстетства не хочется создавать временную модель, вся цель которой - позволить конструктору отработать. Проверил в 1.4 - компилятор тоже по рукам за подобные шутки выдает. Хм. Может быть, я в чем-то ошибаюсь. Факт, что эта ошибка начала проявляться при переползании на 1.5 И правильно делает. Спорно. Имхо, вместо того, чтобы решить проблему, заметают ее дальше под кровать. Можно сделать фабричный метод. Не слишком удобно, поскольку нужна хорошая совместимость; практически нужно, чтобы во всех местах, где сейчас стоит new MyList, я мог бы поставить new MyFilteredList и быть уверенным, что все будет работать, ну и наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 14:20 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
softwarer а можно посмотреть код конструктора родительского класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 14:38 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
funikovyuriа можно посмотреть код конструктора родительского класса? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 15:21 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#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. На экран печатается ca. Тут, как я понимаю, тоже самое. Во время работы конструктора Код: plaintext так что я бы предложил сделать так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 16:53 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
marx_freedom Спасибо. Хорошая идея, но, боюсь, в этом случае не сработает. marx_freedomВо время работы конструктора происходит вызов вашего переопределенного метода setModel. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 00:54 |
|
||
|
Порядок инициализации в классе
|
|||
|---|---|---|---|
|
#18+
softwarerв этом случае не сработает. да.. надо было все же глянуть исходник перед предположением ;-) тогда я бы остановился на приведенном выше переопределении setModel и таком конструкторе Код: plaintext 1. 2. 3. 4. 5. или еще как вариант попробовать конструктор Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 13:58 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2150926]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
213ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 554ms |

| 0 / 0 |
