A combo box is a drop-down list allowing you to choose one option from a list of options.
A WComboBox corresponds to an HTML <select>
element.
WComboBox
is a View widget (see also
Model-View-Controller)
which instantiates its own
WStringListModel
by default. You can use this widget also in
conjunction with another model.
You can capture the selected item and deal with it using a signal/slot mechanism.
void ComboBoxActivated() {
WContainerWidget container = new WContainerWidget();
final WComboBox cb = new WComboBox((WContainerWidget) container);
cb.addItem("Heavy");
cb.addItem("Medium");
cb.addItem("Light");
cb.setCurrentIndex(1);
cb.setMargin(new WLength(10), EnumSet.of(Side.Right));
final WText out = new WText((WContainerWidget) container);
out.addStyleClass("help-block");
cb.changed()
.addListener(
this,
() -> {
out.setText(new WString("You selected {1}.").arg(cb.getCurrentText()));
});
}
WComboBox is an MVC class (model-view-controller). By default a
WStringListModel is used. With this model you can associate a
single column of data to the displayed items. The member methods
addItem()
, insertItem()
and removeItem()
manipulate the model. You can set the model with setModel()
.
Item models support different roles like
JWt.ItemDataRole.DisplayRole
and
JWt.ItemDataRole.UserRole
. The text for an item in the
drop-down box is associated with a
JWt.ItemDataRole.DisplayRole
. Typically, you will associate the
underlying "value" with a JWt.ItemDataRole.UserRole
). In this
way, you can also add additional user roles.
Note that there are still other models like WFormModel which and can be used to represent fields in a form.
void ComboBoxModel() {
WContainerWidget container = new WContainerWidget();
final WComboBox cb = new WComboBox((WContainerWidget) container);
cb.setMargin(new WLength(10), EnumSet.of(Side.Right));
final WStringListModel model = new WStringListModel();
model.addString("Belgium");
model.setData(0, 0, "BE", ItemDataRole.User);
model.addString("Netherlands");
model.setData(1, 0, "NL", ItemDataRole.User);
model.addString("United Kingdom");
model.setData(2, 0, "UK", ItemDataRole.User);
model.addString("United States");
model.setData(3, 0, "US", ItemDataRole.User);
model.setFlags(3, EnumSet.of(ItemFlag.Selectable));
cb.setNoSelectionEnabled(true);
cb.setModel(model);
final WText out = new WText((WContainerWidget) container);
out.addStyleClass("help-block");
cb.changed()
.addListener(
this,
() -> {
WString countryName = cb.getCurrentText();
int row = cb.getCurrentIndex();
WString countryCode =
StringUtils.asString(model.getData(model.getIndex(row, 0), ItemDataRole.User));
out.setText(
new WString("You selected {1} with key {2}.").arg(countryName).arg(countryCode));
});
}