В веб-приложении Vaadin Flow 14.1, используя Java 13, я определил перечисление (см. Учебное пособие ) для поддержки своих радиокнопок (RadioButtonGroup
). ).
private enum FilterOrNot
{
SHOW_ALL( "Show all" ), FILTER( "Filter" ); // Elements defining our enum. Passing our desired display name string to the constructor.
private String displayName;
// Constructor
FilterOrNot ( String displayName ) { this.displayName = displayName; }
String getDisplayName ( ) { return this.displayName; }
}
Обратите внимание на метод getDisplayName
для предоставления текста, который будет использоваться в качестве меток для моих радио-кнопок.
Я успешно определил свои радио-кнопки, поддерживаемые этим enum.
private RadioButtonGroup < FilterOrNot > showAllOrFilter ;
…
showAllOrFilter = new RadioButtonGroup <>() ;
showAllOrFilter.setItems( FilterOrNot.SHOW_ALL , FilterOrNot.FILTER ) ;
Эти переключатели успешно отображаются на экране. Но их заголовками по умолчанию являются имена всех заглавных букв объектов enum: «SHOW_ALL» и «FILTER». Я хочу, чтобы надписи отображались в виде текста со смешанным регистром «Показать все» и «Фильтр».
➥ Как заставить мой виджет переключателей вызывать getDisplayName
вспомогательного перечисления и использовать возвращенный текст в качестве их маркировки?
Я видел класс ComponentRenderer
, который можно назначить с помощью RadioButtonGroup::setRenderer
. Я предполагаю, что это решение. Но я не могу понять синтаксис правильно. Я подозреваю, что в угловых скобках указаны неправильные типы обобщения, но я не совсем уверен. В руководстве есть только несколько кратких упоминаний ComponentRenderer
, поэтому я не уверен, как использовать этот класс.
showAllOrFilter.setRenderer(
new ComponentRenderer < RadioButtonGroup, FilterOrNot >( ( FilterOrNot filterOrNot ) -> {
return filterOrNot.getDisplayName() ;
})
);