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