В настоящее время я разрабатываю приложение с помощью Vaadin. и мой рабочий сценарий состоит в том, чтобы поместить несколько блоков chcekbox в поле со списком. этот сценарий очень хорошо работает с JQuery UI. к сожалению, я не смог найти способ заставить его работать на vaadin ..

Пожалуйста, дайте мне какую-нибудь идею или ресурсы

Заранее спасибо :)

0
Chhea Vanrin 23 Дек 2015 в 05:23

2 ответа

Лучший ответ

Я думаю, что невозможно добавить флажок внутри ComboBox. Если вам нужно работать с Javascript, вы можете использовать GWT Widget или компоненты JavaScript, а также компоненты и расширения пользовательского интерфейса.

См. Мой код ниже, это очень простой компонент javascript vaadin:

@JavaScript({ "theme://javascript/jquery/jquery-2.1.4.min.js", 
          "theme://javascript/chosen/chosen.jquery.js"})
@StyleSheet("theme://javascript/chosen/chosen.css")
public clas VChosenComponent extends VerticalLayout {

    private String id;
    public List<String> values;
    public List<String> selectedValues;

    private String onChangeDynamicFunction;  // Use to passing javascript value to java code

    public VChosenComponent(List<Integer> values) {
       this.values = values;
    }

    @Override
    public void attach() {
        super.attach();
        try {
            id = "chosen-" + getConnectorId();
            onChangeDynamicFunction = VChosenComponent.class.getCanonicalName() + getConnectorId();

            StringBuffer  divHTML = new StringBuffer();
            divHTML.append("<");
            divHTML.append("select data-placeholder=\"Choose a Country...\" style=\"width:350px;\" tabindex=\"1\"> ");
            divHTML.append("    <option value=\"\"></option> ");
            for(String value : values) {
              divHTML.append("  <option value=\"" + value + "\">" + value + "</option> ");
            }
            divHTML.append("</select>");

            Label html = new Label(divHTML.toString(), ContentMode.HTML);
            html.setHeight(100, Unit.PERCENTAGE);
            html.setWidth(100, Unit.PERCENTAGE);

            removeAllComponents();
            addComponent(html);

            StringBuffer  jsScript = new StringBuffer();
            jsScript.append("function() {");
            jsScript.append("   $('#" + id + "').chosen({no_results_text: \"Oops, nothing found!\"});");
            jsScript.append("   $('#" + id + "').chosen().change(function(){ ");
            jsScript.append("       " + dynamicFunction + "($(this).val());");
            jsScript.append("   });");
            jsScript.append("}");

            JavaScript javascript = JavaScript.getCurrent(); 
            javascript.addFunction(dynamicFunction, new JavaScriptFunction() {
                    private static final long serialVersionUID = 3013252366773470787L;
                    @Override
                    public void call(JsonArray arguments) {
                        String value = arguments.getString(0);

                // Corrrect here for your real work
                selectedValue.add(value);
            }
           });

                javascript.execute("setTimeout(" + jsScript.toString() + ", 1)");

        } catch (Throwable t) {
                 setVisible(false);
        }
    }

  public List<String> getSelectedValues() {
    return this.selectedValue;
  }
}

Надеюсь, это поможет вам :)

2
Mankeomorakort 7 Фев 2017 в 07:03

Похоже, вы пытаетесь разработать множественный выбор ComboBox. К сожалению, невозможно добавить какие-либо компоненты вроде CheckBox es внутрь ComboBox.

Возможно, вы могли бы использовать такие компоненты, как Grid или Table, если вам нужен множественный выбор.

3
Henri Kerola 25 Дек 2015 в 22:21