这是我的第一篇文章.我希望有人可以帮助我.
我正在寻找一种方法来分别在UiBinder XML布局文件中定义一个小部件,而不是布局层次结构的一部分.这是一个小例子:
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:Label ui:field="testlabel" text="Hallo" />
<g:HTMLPanel>
...
</g:HTMLPanel>
Run Code Online (Sandbox Code Playgroud)
编译失败,因为ui:UiBinder元素只需要一个子元素.
在Java Code中,我将照常访问和绑定Label小部件:
@UiField Label testlabel;
Run Code Online (Sandbox Code Playgroud)
例如,当您定义Grid或FlexTable时,这可能很有用 - 我想在XML布局文件中定义表头的标签,而不是在代码中以编程方式定义.
提前谢谢了
假设以下*.ui.xml文件:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:VerticalPanel>
<g:Label ui:field="Label1"></g:Label>
<g:Label ui:field="Label2"></g:Label>
<g:Label ui:field="Label3"></g:Label>
</g:VerticalPanel>
Run Code Online (Sandbox Code Playgroud)
如果我现在想要将ClickHandlers添加到所有三个标签,如下所示:
@UiHandler("Label1")
void handleClick(ClickEvent event) {
//do stuff
}
@UiHandler("Label2")
void handleClick(ClickEvent event) {
//do stuff
}
@UiHandler("Label3")
void handleClick(ClickEvent event) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,因为我有3个同名的方法.有没有办法解决这个问题,除了创建自定义小部件并将其添加到VerticalPanel?
在我的应用程序中,我有一个小部件面板(所有相同类型的小部件),以及允许用户向面板添加和删除小部件的按钮.每个小部件内部都是GWT RadioButton组.小部件使用GWT UiBinder,因此在我的ui.xml文件中,我给每个RadioButton一个组名,以便它们链接在一起.
但是,当这个小部件中的2个或更多个添加到面板时,这成为一个问题,因为所有小部件中的所有RadioButton都具有相同的组名.我希望每个小部件中的每个RadioButton组都独立于其他小部件.我怎样才能做到这一点?
我为VerticalLayout面板的边框声明了一些颜色,如:
<ui:style>
.onMouseOverBorderColor {border-color: red; border-style: outset}
.onMouseOutBorderColor {border-color: black; border-style: outset}
</ui:style>
Run Code Online (Sandbox Code Playgroud)
然后我想根据鼠标的位置更改面板边框的颜色,并添加到我的窗口小部件的构造函数中:
clickable.addMouseOverHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
GWT.log("mouse over");
border.setStyleName("onMouseOverBorderColor");
}
});
clickable.addMouseOutHandler(new MouseOutHandler() {
@Override
public void onMouseOut(MouseOutEvent event) {
GWT.log("mouse out");
border.setStyleName("onMouseOutBorderColor");
}
});
Run Code Online (Sandbox Code Playgroud)
但是......没有任何反应!我做错了什么?
建议后的代码(不起作用):
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.fontStyleTitle {font-weight: bold }
.border {border-color: black; border-style: outset}
.border:hover {border-color: red; border-style: outset}
</ui:style>
<g:FocusPanel ui:field="clickable">
<g:VerticalPanel ui:field="border" borderWidth="1" styleName="style.border">
<g:Image ui:field="myImage"/>
<g:Label ui:field="myTitle" horizontalAlignment="ALIGN_CENTER" styleName="{style.fontStyleTitle}"/>
</g:VerticalPanel>
</g:FocusPanel>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
和java类:
public …Run Code Online (Sandbox Code Playgroud) 我使用混淆的风格,例如.
<ui:style>
.explanation {
text-align: center;
}
</ui:style>
...
<g:HTMLPanel>
<div class="{style.explanation}">
...
Run Code Online (Sandbox Code Playgroud)
这是不好的做法吗?
当我查看HTML时看起来没问题,或者我误解了警告..
我在GWT的开发模式中收到以下警告:
Template with variable in CSS attribute context:
The template code generator cannot guarantee HTML-safety of the template
-- please inspect manually or use SafeStyles to specify arguments in a CSS attribute context
Run Code Online (Sandbox Code Playgroud) 简单的例子.我在UiBinder中声明了2个样式:
<ui:style>
.success {
font-size: 13px;
margin: 15px;
font-weight: bold;
display: inline;
padding: 3px 7px;
background: #FFF1A8;
}
.error {
font-size: 13px;
margin: 15px;
font-weight: bold;
display: inline;
padding: 3px 7px;
background: #990000;
color: #fff;
}
</ui:style>
Run Code Online (Sandbox Code Playgroud)
我也有一个标签,其中一个也适用.
<g:Label ui:field="statusLabel" styleName='{style.success}' />
Run Code Online (Sandbox Code Playgroud)
在UiBinder中,有没有一种方法可以以编程方式将样式切换为错误样式?很高兴能够在窗口小部件中组织我的CSS,我还没有找到另一种组织它的好方法.
如果我问的是不可能的,我应该如何在gwt中组织我的CSS,这样我就不会有一大堆风格,而且也很简单,也可用?我想有一个聪明的方法来使用ClientBundle,但我还没弄明白.我还认为能够通过在UiBinder中保留所有内容而不会弄乱其他文件来做上述方法会更方便.无论哪种方式,请在失控之前帮助我!
现在我有以下代码工作:
@UiHandler("usernameTextBox")
void onUsernameTextBoxKeyPress(KeyPressEvent event) {
keyPress(event);
}
@UiHandler("passwordTextBox")
void onPasswordTextBoxKeyPress(KeyPressEvent event) {
keyPress(event);
}
void keyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
submit();
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够为视图中的所有元素只有一个侦听器,而不会为每个文本框复制事件.
最终目标是,如果他们按下回车键,无论他们在页面上的哪个位置,都应该提交表单.
谢谢!
我刚创建了widget:
public class myWidget<T> extends FlowPanel {
private T value;
public T getValue()
{
return value;
}
public myWidget(T[] values) {
for (T value : values)
{
//do action
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用UiBinder添加它?有可能吗?
我正在开发一些我希望能够与UiBinder一起使用的自定义小部件.不幸的是,我继续浪费我的生命,追逐以下错误:
在urn中没有匹配"..."的类:import:...
这似乎是在类中有任何阻止GWT编译器处理它的错误时抛出的全部异常.这包括类的整个依赖关系树中的任何内容.
为了节省我自己和遇到同一问题的任何人一些时间和痛苦,让我们在这里列出一个最意想不到的,很难找到原因的列表.我将从我的最新版开始,这让我决定在这里发布.
由于VerticalPanel在标准模式下无法正常工作(http://www.gwtproject.org/doc/latest/DevGuideUiPanels.html),因此Google建议使用FlowPanel替换VerticalPanel .
myflowPanel.getElement().getStyle().setFloat(Float.NONE);
Run Code Online (Sandbox Code Playgroud)
不起作用
那么如何使FlowPanel像VerticalPanel一样垂直流动它的子节点?