这是使用Vaadin的经典例子
@Route("hello")
public class Dupa extends VerticalLayout {
public renderButtons() throws IOException, I2CFactory.UnsupportedBusNumberException {
Button kitchen_button = new Button("Kitchen");
Button bathrooom_button = new Button("bathroom");
kitchen_button .addClickListener(click -> {
//some actions...
});
add(kitchen_button );
add(bathrooom_button );
}
}
我的问题是从类外部访问kitchen_button。我尝试在类中添加静态字段。甚至尝试在其他类中创建此按钮并作为参数返回此处。
这个函数总是在有人打开页面时运行。所以如果你在Firefox或chrome上打开页面(转到特定的endpoint),它会运行该方法两次。这也造成了问题。我尝试了疯狂的解决方案,比如,创建此按钮后,将其添加到列表中,然后在列表中的每个元素上运行我的操作。这是非常愚蠢的解决方案,因为每次打开新页面后,此按钮都在创建。没有成功…
我想从另一个类使用该方法
public void changeColourButtonToRedOff(Button ob) {
ob.addThemeVariants(ButtonVariant.LUMO_PRIMARY, ButtonVariant.LUMO_ERROR);
ob.removeThemeVariants(ButtonVariant.LUMO_SUCCESS);
}
我尝试了很多事情正如我上面所说但它不工作
我尝试将其添加为静态,作为类中的字段。甚至尝试在其他类中创建此按钮并作为参数返回此处。
我发现通常最好将Vaadin小部件声明为布局上的成员字段,而不是本地。
public class Dupa extends VerticalLayout {
\\ Member fields
public Button kitchen_button ;
…
public renderButtons() throws IOException, I2CFactory.UnsupportedBusNumberException {
this.kitchen_button = new Button( "Kitchen" ) ;
…
}
…
}
要使该按钮随处可见,请将其标记为public
。我并不建议让您的Vaadin小部件随处可见。
你说:
我的问题是从课外接触kitchen_button
从多个类访问您的Vaadin小部件可能表明设计不佳。通常最好让布局管理自己的小部件。其他类应该向布局发送消息,而不是直接操作布局的内容。
你说:
我试着把它加为静电
不,绝对不要这样做。您的每个用户都必须有自己的按钮实例。使用静态
,您在整个JVM中只有一个实例,并且Vaadin不允许共享状态/组件。当尝试附加到另一个会话时,您将收到错误消息。