public class SelectionComboBox extends HorizontalPanel implements ClickHandler {
private class ListItem extends Label implements ClickHandler {
String text;
public ListItem(String text) {
this.text = text;
this.setText(text);
this.addClickHandler(this);
}
@Override
public void onClick(ClickEvent event) {
selectedValue = text;
popup.hide();
}
}
CheckBox combo;
FlowPanel list;
PopupPanel popup;
String selectedValue;
Label triangle;
public SelectionComboBox() {
list = new FlowPanel();
popup = new PopupPanel();
combo = new CheckBox();
triangle = new Label();
list.add(new ListItem("All"));
list.add(new ListItem("None"));
list.add(new ListItem("Read"));
list.add(new ListItem("Unread"));
list.add(new ListItem("Starred"));
list.add(new ListItem("Unstarred"));
popup.setWidget(list);
popup.setPopupPosition(this.getAbsoluteLeft(),
this.getAbsoluteTop() + this.getOffsetHeight());
this.addDomHandler(this, ClickEvent.getType());
triangle.addClickHandler(this);
this.add(combobox);
this.add(triangle);
}
public void addValueChangeHandler(ValueChangeHandler<Boolean> handler) {
combo.addValueChangeHandler(handler);
}
public String getSelection() {
return selectedValue;
}
@Override
public void onClick(ClickEvent event) {
popup.show();
}
}
Стиль для треугольника:
height:0;
width:0;
border-left:20px solid transparent;
border-right:20px solid transparent;
border-top:20px solid black;
Вышеуказанные стили дадут вам треугольник, просто используя Css.
Возможно, вам придется добавить функцию, которая не будет выбиратьФлажок, если в списке нет элементов, которые относятся к выбору.
(Примечание: код не проверен, но должен помочь вам начать работу)