单击JAVA GWT更改小部件颜色

时间:2015-07-09 20:08:08

标签: java gwt widget

我有一个自定义类,它扩展了Composite,它扩展了widget。我添加了一个domHandler来处理ClickEvents。目前我点击时将颜色设置为蓝色。该小部件属于一个面板,其中包含许多同一时间的小部件(TripEventItem)。我希望在单击其他窗口小部件时将颜色更改回黑色文本。知道怎么做吗?

final TripEventItem item = new TripEventItem(results.get(i), tripNumber);
        tripNumber++;
        item.addDomHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                finalResults.get(item.getTripId() - 1);
                List<LocationEvent> events = item.getTripEvent();
                listener.displayResults(new ArrayList(events));
                item.getElement().getStyle().setColor("blue");
            }
        }, ClickEvent.getType());

1 个答案:

答案 0 :(得分:1)

单击某个项目时,在您的处理程序中,您无法知道其他项目的状态。您可以将所有项目保留在列表中。然后迭代这个列表并放置你的dom处理程序。您onClick必须迭代此列表并恢复颜色。然后,对于当前项目,您应用由click事件引起的更改。

一个粗略的例子就是这样的

final List<TripEventItem> items = new ArrayList<>();
for(int i = 0; i < results.size(); i++) {       
    final TripEventItem item = new TripEventItem(results.get(i), tripNumber);
    items.add(item);
}

for(int i = 0; i < items.size(); i++) {
    final TripEventItem item = items.get(i);
    item.addDomHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            for(int i = 0; i < items.size(); i++) {
                TripEventItem otherItem = items.get(i);
                restore(otherItem);
            }

            item.getElement().getStyle().setColor("blue");
        }
    }, ClickEvent.getType());
}