Они функционально разные.
Первый говорит: всякий раз, когда этот компонент повторно отображается, обновите значение. Второй говорит: отображает значение, как это было во время создания.
Какой из них вам нужен? Если вы хотите динамически обновляемую этикетку, у вас нет выбора, это PropertyModel
или CompoundPropertyModel
(см. Ниже).
Если вы хотите, чтобы он остался прежним, даже если базовый объект изменился, вы не можете использовать PropertyModel
s.
Однако, если вы абсолютно уверены в том, что cat.getName()
никогда не изменится, и, следовательно, обе версии ведут себя так же, лично я бы не использовать PropertyModel
по трем причинам:
- Он ломает инкапсуляцию: в отсутствие геттера он попытается получить доступ к самому частному полю.
- Как @Jesse указал на это, это «волшебство». Если вы реорганизуете свой класс и переименуете свои поля, ваш
PropertyModel
сломается.
- Непросто читать или обслуживать. Конечно, это не намного сложнее, но зачем добавлять ненужную сложность, когда вы ничего не получаете от этого? Если вы разместите
cat.getName()
, вы можете «щелкнуть» в своей среде IDE, ваш ярлык появится в поиске всех вызовов метода getName()
и т. Д.
Если у вас есть много компонентов, относящихся к полям одного и того же объекта, вы можете рассмотреть возможность использования CompoundPropertyModel
с, что, хотя по-прежнему страдают от проблем 1 и 2, сделать ваш код выглядеть намного ровнее.
Если у вас есть три или менее таких компонентов, хотя вам и не нужна динамическая модель, просто используйте формат без модуляции.
Второй вариант - работа. Конструктор создать модель на этой строке :( общественного Ярлык (окончательный идентификатор строки, String ярлык) { \t это (идентификатор, новая модель (ярлык));} –
pushistic
Это только оборачивает этикетку в модель, а модель не может обновить это значение позже, потому что ничего не знает о cat-объекте. – rotsch