不能添加组件到布局
问题描述:
大家好我有一个奇怪的问题,但我敢肯定我正在做一些愚蠢的事情。 在Maven项目我有我的UI类,如下:不能添加组件到布局
package my.vaadin.project.exceptionTest;
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@Theme("mytheme")
@Widgetset("my.vaadin.project.exceptionTest.MyAppWidgetset")
public class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
final Calculation calculation = new Calculation();
final Label title = new Label("Calculation");
layout.addComponents(title, calculation);
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}
然后,我必须保持各领域,我再试图添加到用户界面,不成功另一个类:
package my.vaadin.project.exceptionTest;
import java.awt.Component;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.event.Action;
public class Calculation extends CustomComponent{
final VerticalLayout vl = new VerticalLayout();
final TextField divisor = new TextField();
final TextField dividend = new TextField();
Button button = new Button("Click Me");
public Calculation(){
divisor.setCaption("Enter the divisor:");
dividend.setCaption("Enter the dividend:");
button.addClickListener(new Button.ClickListener(){
@Override
public void buttonClick(ClickEvent event) {
System.out.println("this is a test");
}
});
vl.setMargin(true);
vl.setSpacing(true);
vl.addComponents(divisor, dividend, button);
}
}
所以我的问题是,当在UI类我做
layout.addComponents(title, calculation);
我得到一个错误说:“该方法addComponents(Component等)的类型AbstractComponentContainer不适用参数(标签,计算)“ 我以前做过类似的事情,比如创建一个单独的类的对象,并将其添加到布局,它已经工作,这次它不,我不知道它是什么是我做错了......任何想法? 谢谢
答
方法addComponents(...)
只接受Component
作为参数。 您Calculation
类不会扩展/实现Component
@antobbo为自己的组件,基类CustomComponent是最好的做法。请参阅[文档](https://vaadin.com/docs/-/part/framework/components/components-customcomponent.html)。 –
如果我使用'extends Component',它仍然抱怨并且在使用addComponents()的时候给了我一个错误,但是如果我改为'扩展CustomComponent',它似乎就OK了,因为编译器可以。麻烦的是,我的领域仍然没有出现。所以,我看了链接@SteffenHarbich,并试图将其应用于我的代码。我已经对线程 – antobbo
中的类进行了处理,看起来像我想到的那样。显然只是添加'layout.addComponents(title,calculation)'中的对象''不起作用,但我必须指定要添加的对象的属性,例如'layout.addComponents(title,calculation.button,calculation.divisor,calculation .dividend,calculation.result);'。我觉得这有点奇怪,但我一直以为我可以直接将对象添加到布局 – antobbo