原文: https://howtodoinjava.com/vaadin/vaadin-combobox-examples/

在本教程中,我们将学习与 Vaadin ComboBox UI 组件一起使用,包括设置值,过滤,添加新值和事件处理。

  1. Table of Contents
  2. Set ComboBox Values List
  3. Disable Empty/Null Selection
  4. Pre-selecting value
  5. Enable/Disable Values Filtering
  6. Editable Vaadin ComboBox
  7. Add Custom CSS Style
  8. Complete Example

设置组合框值列表

要将项目添加到 vaadin 组合框组件,请使用ComboBox.addItem()ComboBox.addItems()方法。

Vaadin `ComboBox`示例 - 图1

Vaadin ComboBox项目

  1. ComboBox combobox = new ComboBox("Select your gender:");
  2. //Add multiple items
  3. combobox.addItems("Select", "Male", "Female", "Other");
  4. layout.addComponent(combobox);

如果您想一次添加一项:

  1. ComboBox combobox = new ComboBox("Select your gender:");
  2. //Add one item at a time
  3. combobox.addItem("Select");
  4. combobox.addItem("Male");
  5. combobox.addItem("Female");
  6. combobox.addItem("Other");
  7. layout.addComponent(combobox);

同样,您可以使用其他数据结构来填充组合框项目。 例如。 我已经使用枚举类型来填充 vaadin 组合框项目

  1. enum Genders {
  2. MALE("Male"), FEMALE("Female"), OTHERS("Others");
  3. private String name;
  4. private Genders(String name) {
  5. this.name = name;
  6. }
  7. @Override
  8. public String toString() {
  9. return name;
  10. }
  11. }
  12. ComboBox combobox = new ComboBox("Select your gender:");
  13. //Add enum values
  14. combobox.addItems("Select", Genders.MALE, Genders.FEMALE, Genders.OTHERS);
  15. layout.addComponent(combobox);

禁用空选项

您在第一个屏幕截图中注意到第一个选项为空。 如果要删除此空选项,请使用combobox.setNullSelectionAllowed(false);方法。

Vaadin `ComboBox`示例 - 图2

Vaadin 组合框中的空选项已删除

  1. ComboBox combobox = new ComboBox("Select your gender:");
  2. combobox.addItems("Select", "Male", "Female", "Other");
  3. //Remove empty option
  4. combobox.setNullSelectionAllowed(false);
  5. layout.addComponent(combobox);

预选值

很多时候您想预选一些值,例如,如果您正在显示一个带有预先存储在数据库中的值的编辑表单。 在这种情况下,请使用setValue()方法。

Vaadin `ComboBox`示例 - 图3

vaadin 组合框中的预选值

  1. ComboBox combobox = new ComboBox("Select your gender:");
  2. combobox.addItems("Select", "Male", "Female", "Other");
  3. //Remove empty option
  4. combobox.setNullSelectionAllowed(false);
  5. //Pre-set some value
  6. combobox.setValue("Male");
  7. layout.addComponent(combobox);

启用/禁用值过滤

默认情况下,vaadin 组合框组件支持过滤,即您可以通过键入文本框来过滤值。 如果要控制启用/禁用此功能,请使用combobox.setFilteringMode()方法。

Vaadin `ComboBox`示例 - 图4

vaadin 组合框中的过滤

共有 3 种过滤模式:

  1. FilteringMode.CONTAINS


与包含组件文本字段部分中给出的字符串的任何项目匹配。

  1. FilteringMode.OFF


它可以过滤掉并始终显示所有项目。

  1. FilteringMode.STARTSWITH


仅匹配以给定字符串开头的项目。 这是 vaadin7 中的默认模式。

  1. ComboBox combobox = new ComboBox("Select your gender:");
  2. combobox.addItems("Select", "Male", "Female", "Other");
  3. combobox.setNullSelectionAllowed(false);
  4. //Add Filtering
  5. combobox.setFilteringMode(FilteringMode.CONTAINS);
  6. layout.addComponent(combobox);

Vaadin 可编辑ComboBox

可编辑组合框中,您也可以从 UI 添加新项目。 要添加新项目,只需键入新项目标题,然后按Enter

添加一个NewItemHandler实例来处理新添加的项目。 例如。 添加后,我在组合框中选择它作为当前值。

Vaadin `ComboBox`示例 - 图5

可编辑ComboBox

  1. Label label = new Label();
  2. ComboBox combobox = new ComboBox("Select your gender:");
  3. combobox.addItems("Select", "Male", "Female", "Other");
  4. combobox.setNullSelectionAllowed(false);
  5. //Allow new Items
  6. combobox.setNewItemsAllowed(true);
  7. combobox.setImmediate(true);
  8. combobox.setNewItemHandler(new NewItemHandler(){
  9. private static final long serialVersionUID = 1L;
  10. @Override
  11. public void addNewItem(String newItemCaption) {
  12. combobox.addItem(newItemCaption);
  13. combobox.setValue(newItemCaption);
  14. label.setValue("You added : " + newItemCaption);
  15. }
  16. });
  17. layout.addComponent(label);
  18. layout.addComponent(combobox);

添加自定义 CSS 样式

  • 整个组合框组件都包含在v-filterselect样式中。
  • 输入字段为v-filterselect-input样式。
  • 右端用于打开和关闭下拉结果列表的按钮为v-filterselect-button样式。
  • 下拉结果列表具有整体v-filterselect-suggestpopup样式。
  • 它包含v-filterselect-suggestmenu样式的建议列表。

修改以上 CSS 类以更改组合框的显示。

完整的例子

  1. package com.howtodoinjava.vaadin.demo;
  2. import com.vaadin.annotations.Theme;
  3. import com.vaadin.annotations.VaadinServletConfiguration;
  4. import com.vaadin.server.VaadinRequest;
  5. import com.vaadin.server.VaadinServlet;
  6. import com.vaadin.shared.ui.combobox.FilteringMode;
  7. import com.vaadin.ui.AbstractSelect.NewItemHandler;
  8. import com.vaadin.ui.ComboBox;
  9. import com.vaadin.ui.Label;
  10. import com.vaadin.ui.UI;
  11. import com.vaadin.ui.VerticalLayout;
  12. @Theme("mytheme")
  13. public class MyUI extends UI {
  14. private static final long serialVersionUID = 1387172685749279538L;
  15. enum Genders {
  16. MALE("Male"), FEMALE("Female"), OTHERS("Others");
  17. private String name;
  18. private Genders(String name) {
  19. this.name = name;
  20. }
  21. @Override
  22. public String toString() {
  23. return name;
  24. }
  25. }
  26. @Override
  27. protected void init(VaadinRequest vaadinRequest) {
  28. final VerticalLayout layout = new VerticalLayout();
  29. addListItems(layout);
  30. removeEmptySelection(layout);
  31. preSelectValue(layout);
  32. addFiltering(layout);
  33. editableCombobox(layout);
  34. layout.setMargin(true);
  35. layout.setSpacing(true);
  36. setContent(layout);
  37. }
  38. private void addListItems(VerticalLayout layout) {
  39. ComboBox combobox = new ComboBox("Select your gender:");
  40. /*
  41. * combobox.addItem("Select"); combobox.addItem("Male");
  42. * combobox.addItem("Female"); combobox.addItem("Other");
  43. */
  44. // combobox.addItems("Select", "Male", "Female", "Other");
  45. combobox.addItems("Select", Genders.MALE, Genders.FEMALE, Genders.OTHERS);
  46. layout.addComponent(combobox);
  47. }
  48. private void removeEmptySelection(VerticalLayout layout) {
  49. ComboBox combobox = new ComboBox("Select your gender:");
  50. combobox.addItems("Select", "Male", "Female", "Other");
  51. //Remove empty option
  52. combobox.setNullSelectionAllowed(false);
  53. layout.addComponent(combobox);
  54. }
  55. private void preSelectValue(VerticalLayout layout) {
  56. ComboBox combobox = new ComboBox("Select your gender:");
  57. combobox.addItems("Select", "Male", "Female", "Other");
  58. //Remove empty option
  59. combobox.setNullSelectionAllowed(false);
  60. //Pre-set some value
  61. combobox.setValue("Male");
  62. layout.addComponent(combobox);
  63. }
  64. private void addFiltering(VerticalLayout layout) {
  65. ComboBox combobox = new ComboBox("Select your gender:");
  66. combobox.addItems("Select", "Male", "Female", "Other");
  67. combobox.setNullSelectionAllowed(false);
  68. //Add Filtering
  69. combobox.setFilteringMode(FilteringMode.CONTAINS);
  70. layout.addComponent(combobox);
  71. }
  72. private void editableCombobox(VerticalLayout layout)
  73. {
  74. Label label = new Label();
  75. ComboBox combobox = new ComboBox("Select your gender:");
  76. combobox.addItems("Select", "Male", "Female", "Other");
  77. combobox.setNullSelectionAllowed(false);
  78. //Allow new Items
  79. combobox.setNewItemsAllowed(true);
  80. combobox.setImmediate(true);
  81. combobox.setNewItemHandler(new NewItemHandler(){
  82. private static final long serialVersionUID = 1L;
  83. @Override
  84. public void addNewItem(String newItemCaption) {
  85. combobox.addItem(newItemCaption);
  86. combobox.setValue(newItemCaption);
  87. label.setValue("You added : " + newItemCaption);
  88. }
  89. });
  90. layout.addComponent(label);
  91. layout.addComponent(combobox);
  92. }
  93. @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
  94. public static class MyUIServlet extends VaadinServlet {
  95. private static final long serialVersionUID = -2718268186398688122L;
  96. }
  97. }

源码下载

学习愉快!

参考文献:

查看ComboBox

查看图书示例

查看 Wiki