gpt4 book ai didi

user-interface - gwt 小部件 - 互斥的切换按钮

转载 作者:行者123 更新时间:2023-12-04 16:37:37 25 4
gpt4 key购买 nike

我想要一个 ToggleButton 的混合体和 RadioButton .
我想要 RadioButton 的“互斥”部分,以及 ToggleButton(向上和向下状态)的 gui 外观和行为。
一个已经存在了吗?

最佳答案

我已经调整了 kirushik 的解决方案并创建了一个简单的“ToggleButtonPanel”小部件,该小部件采用任意数量的 ToggleButton(以及您可能想要添加的任何其他小部件)和您选择的面板(默认为 VerticalPanel)并使按钮相互独家的。

这样做的好处是当单击按钮时面板本身会触发 ClickEvents。这样,您可以向 ToggleGroupPanel 添加一个 ClickHandler,然后使用 event.getSource() 确定单击了哪个按钮

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class ToggleButtonPanel extends Composite implements HasWidgets, HasClickHandlers{

public ToggleButtonPanel() {
this(new VerticalPanel());
}

public ToggleButtonPanel(Panel panel){
this.panel = panel;
initWidget(panel);
}

@Override
public void add(Widget w) {
if(w instanceof ToggleButton){
ToggleButton button = (ToggleButton) w;
button.addClickHandler(handler);
}
panel.add(w);
}

@Override
public void clear() {
panel.clear();
}

@Override
public Iterator<Widget> iterator() {
return panel.iterator();
}

@Override
public boolean remove(Widget w) {
return panel.remove(w);
}

@Override
public void setWidth(String width) {
panel.setWidth(width);
};

@Override
public void setHeight(String height) {
panel.setHeight(height);
}

private final Panel panel;
private ClickHandler handler = new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
Iterator<Widget> itr = panel.iterator();
while(itr.hasNext()){
Widget w = itr.next();
if(w instanceof ToggleButton){
ToggleButton button = (ToggleButton) w;
button.setDown(false);
if(event.getSource().equals(button)) {
button.setDown(true);
}
}
}

for(ClickHandler h : handlers){
h.onClick(event);
}
}
};

private List<ClickHandler> handlers = new ArrayList<ClickHandler>();
@Override
public HandlerRegistration addClickHandler(final ClickHandler handler) {
handlers.add(handler);
return new HandlerRegistration() {

@Override
public void removeHandler() {
handlers.remove(handler);
}
};
}

}

关于user-interface - gwt 小部件 - 互斥的切换按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1352675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com