2323import java .util .Collection ;
2424
2525import com .vaadin .flow .component .ClickEvent ;
26- import com .vaadin .flow .component .Component ;
27- import com .vaadin .flow .component .ComponentEvent ;
28- import com .vaadin .flow .component .ComponentEventListener ;
2926import com .vaadin .flow .component .ItemLabelGenerator ;
3027import com .vaadin .flow .component .button .Button ;
3128import com .vaadin .flow .component .combobox .ComboBox ;
3229import com .vaadin .flow .component .datepicker .DatePicker ;
33- import com .vaadin .flow .data .binder .HasDataProvider ;
3430import com .vaadin .flow .data .provider .DataProvider ;
3531
3632
4137 */
4238public class EditableLabelComboBox <T >
4339 extends AbstractEditableLabel <Object , EditableLabelComboBox , T , ComboBox <T >>
44- implements HasDataProvider <T >
4540{
4641 private T value ;
4742
@@ -50,22 +45,53 @@ public EditableLabelComboBox()
5045 super (new ComboBox <>());
5146 }
5247
48+ public EditableLabelComboBox (final T selectedValue , final Collection <T > selectableItems )
49+ {
50+ this ();
51+ this .setItems (selectableItems );
52+ this .setValue (selectedValue );
53+ }
54+
55+ public EditableLabelComboBox (final T selectedValue , final T ... selectableItems )
56+ {
57+ this ();
58+ this .setItems (selectableItems );
59+ this .setValue (selectedValue );
60+ }
61+
62+ public EditableLabelComboBox (final T selectedValue , final String emptyValue , final Collection <T > selectableItems )
63+ {
64+ super (new ComboBox <>(), emptyValue );
65+ this .setItems (selectableItems );
66+ this .setValue (selectedValue );
67+ }
68+
69+ public EditableLabelComboBox (final T selectedValue , final String emptyValue , final T ... selectableItems )
70+ {
71+ super (new ComboBox <>(), emptyValue );
72+ this .setItems (selectableItems );
73+ this .setValue (selectedValue );
74+ }
75+
5376 @ Override
5477 public void setValue (final T value )
5578 {
79+ final T oldValue = this .value ;
80+ this .value = value ;
81+
5682 if (value == null )
5783 {
5884 this .setLabelText (this .emptyValue );
5985 }
6086 else
6187 {
62- this .value = value ;
6388 this .setLabelText (this .getEditor ().getItemLabelGenerator ().apply (this .value ));
6489 if (this .getLabelText ().isBlank ())
6590 {
6691 this .setLabelText (this .emptyValue );
6792 }
6893 }
94+ this .fireChangedEvent (oldValue );
6995 }
7096
7197 @ Override
@@ -91,41 +117,20 @@ public void setItemLabelGenerator(
91117 {
92118 this .getEditor ().setItemLabelGenerator (itemLabelGenerator );
93119 }
94-
95- /**
96- * Event handler delegate method for the {@link Button} {@link #btnEdit}.
97- *
98- * @eventHandlerDelegate Do NOT delete, used by UI designer!
99- * @see ComponentEventListener#onComponentEvent(ComponentEvent)
100- */
120+
101121 @ Override
102122 protected void btnEdit_onClick (final ClickEvent <Button > event )
103123 {
104124 this .getEditor ().setValue (this .value );
105125 this .getEditor ().focus ();
126+ this .getEditor ().setOpened (true );
106127 this .enableEditMode ();
107128 }
108-
109- /**
110- * Event handler delegate method for the {@link Button} {@link #btnSave}.
111- *
112- * @eventHandlerDelegate Do NOT delete, used by UI designer!
113- * @see ComponentEventListener#onComponentEvent(ComponentEvent)
114- */
129+
115130 @ Override
116131 protected void btnSave_onClick (final ClickEvent <Button > event )
117132 {
118- final T oldValue = this .value ;
119- this .value = this .getEditor ().getValue ();
120- this .setLabelText (
121- this .getEditor ().getItemLabelGenerator ().apply (this .value )
122- );
123- this .fireChangedEvent (oldValue );
124- if (this .getLabelText ().isBlank ())
125- {
126- this .setLabelText (this .emptyValue );
127- }
128-
133+ this .setValue (this .value );
129134 this .disableEditMode ();
130135 }
131136
@@ -135,36 +140,16 @@ protected void btnClose_onClick(final ClickEvent<Button> event)
135140 this .disableEditMode ();
136141 }
137142
138- @ Override
139- protected void initUI (
140- final Component editIcon ,
141- final Component saveIcon ,
142- final Component abortIcon
143- )
144- {
145- super .initUI (editIcon , saveIcon , abortIcon );
146- // this.getEditor().setItemLabelGenerator(EditableLabelComboBox.NonNull(CaptionUtils::resolveCaption));
147- this .getEditor ().setWidthFull ();
148- this .getEditor ().getElement ().setAttribute ("theme" , "small" );
149- this .getEditor ().addValueChangeListener (l ->
150- {
151- this .value = l .getValue ();
152- });
153- }
154-
155- @ Override
156- public void setDataProvider (final DataProvider <T , ?> dataProvider )
143+ public void setDataProvider (final DataProvider <T , String > dataProvider )
157144 {
158- // this.getEditor().setItems(dataProvider);
145+ this .getEditor ().setItems (dataProvider );
159146 }
160147
161- @ Override
162148 public void setItems (final Collection <T > items )
163149 {
164150 this .getEditor ().setItems (items );
165151 }
166152
167- @ Override
168153 public void setItems (final T ... items )
169154 {
170155 this .getEditor ().setItems (items );
0 commit comments