protected <V> void component(@NotNull JComponent component,
                               @NotNull Supplier<? extends V> beanGetter,
                               @NotNull Setter<? super V> beanSetter,
                               @NotNull Supplier<? extends V> componentGetter,
                               @NotNull Setter<? super V> componentSetter) {
    BeanField<JComponent, V> field = new BeanField<>(new CallbackAccessor<>(beanGetter, beanSetter)) {
      @Override
      protected @NotNull JComponent createComponent() {
        return component;
      }

      @Override
      protected V getComponentValue() {
        return componentGetter.get();
      }

      @Override
      protected void setComponentValue(V value) {
        componentSetter.set(value);
      }
    };
    myFields.add(field);
  }
protected <V> void component(@NotNull JComponent component,
                               @NotNull Supplier<? extends V> beanGetter,
                               @NotNull Setter<? super V> beanSetter,
                               @NotNull Supplier<? extends V> componentGetter,
                               @NotNull Setter<? super V> componentSetter)