【发布时间】:2011-05-19 09:45:20
【问题描述】:
我正在 GWT 中构建一个应用程序。我有一个装饰的tabpanel 我的应用程序。在哪里动态添加面板。现在我想要 实现这些选项卡的关闭。我想添加一个关闭的图像 标签栏和事件到该图像以关闭。我正在使用 UIbinder。
【问题讨论】:
我正在 GWT 中构建一个应用程序。我有一个装饰的tabpanel 我的应用程序。在哪里动态添加面板。现在我想要 实现这些选项卡的关闭。我想添加一个关闭的图像 标签栏和事件到该图像以关闭。我正在使用 UIbinder。
【问题讨论】:
工作代码是这样的;
private Widget getTabTitle(final Widget widget, final String title) {
final HorizontalPanel hPanel = new HorizontalPanel();
final Label label = new Label(title);
DOM.setStyleAttribute(label.getElement(), "whiteSpace", "nowrap");
ImageAnchor closeBtn = new ImageAnchor();
closeBtn.setResource(images.cross());
closeBtn.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
int widgetIndex = tabs.getWidgetIndex(widget);
if (widgetIndex == tabs.getSelectedIndex()) {
tabs.selectTab(widgetIndex - 1);
}
tabs.remove(widgetIndex);
}
});
hPanel.add(label);
hPanel.add(new HTML("   "));
hPanel.add(closeBtn);
hPanel.setStyleName("gwt-TabLayoutPanelTab");
return hPanel;
}
为了添加标签,
public void addTab() {
TabWriting tw = new TabWriting(); /* TabWriting in my case, this can be any widget */
tabs.add(tw, getTabTitle(tw, "Writing"));
tabs.selectTab(tw);
}
你会需要,ImageAnchorClass
public class ImageAnchor extends Anchor {
public ImageAnchor() {
}
public void setResource(ImageResource imageResource) {
Image img = new Image(imageResource);
img.setStyleName("navbarimg");
DOM.insertBefore(getElement(), img.getElement(), DOM
.getFirstChild(getElement()));
}}
【讨论】:
GWT 本身不支持它。
您可以手动尝试添加。
阅读这个 - http://groups.google.com/group/google-web-toolkit/browse_thread/thread/006bc886c1ccf5e1?pli=1
我没有亲自尝试过,但是看看gregor的解决方案(最后一个)。
【讨论】:
你有点需要按照这个思路做一些事情
GWT Close button in title bar of DialogBox
首先,您需要在创建新选项卡时传入选项卡标题。你传入的标题应该有你的标签文本,还有一个 X 图像或文本标签可以点击。然后在关闭对象上添加一个事件处理程序,该对象获取您添加到 tabPanel 的小部件并将其删除。这是一些有效的内联代码
public void loadTab(final Widget widget, String headingText, String tooltip) {
HorizontalPanel panel = new HorizontalPanel();
panel.setStyleName("tabHeader");
panel.setTitle(tooltip);
Label text = new Label();
text.setText(headingText);
text.setStyleDependentName("text", true);
Label close = new Label();
close.setText("X");
close.setTitle(closeText_ + headingText);
text.setStyleDependentName("close", true);
close.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Window.alert("close this tab");
ClientGlobal.LOG.info("widget : " + tabPanel_.getWidgetIndex(widget));
tabPanel_.remove(tabPanel_.getWidgetIndex(widget));
}
});
panel.add(text);
panel.add(close);
panel.setCellHorizontalAlignment(text, HasHorizontalAlignment.ALIGN_LEFT);
panel.setCellHorizontalAlignment(close, HasHorizontalAlignment.ALIGN_RIGHT);
tabPanel_.add(widget, panel);
tabPanel_.getTabWidget(widget).setTitle(tooltip);
tabPanel_.selectTab(widget);
}
【讨论】: