我是Vaadin的新手,我想实现这个:当点击一个按钮时,会打开一个包含日历的窗口,用户应该在日历中选择一个日期。用户应该被阻止,直到他选择日期为止,所以我写了这个:
public class KopivaadincomponentsUI extends UI {
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
setContent(layout);
Button button = new Button("Click Me");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
DateChooser dateChooser = new DateChooser(new com.kopiright.xkopi.lib.type.Date(2013, 12, 9));
UI.getCurrent().addWindow(dateChooser);
synchronized (Lock.getInstance()) {
while (dateChooser.isVisible()) {
try {
Lock.getInstance().wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
});
layout.addComponent(button);
}
这是DateChooser - 包含日历的窗口:
public class DateChooser extends Window implements ValueChangeListener{
public DateChooser(Date date){
this.setModal(true);
final FormLayout content = new FormLayout();
calPane = new CalendarPane();
content.addComponent(calPane);
this.setContent(content);
lock =new Lock();
}
/*package*/ class CalendarPane extends InlineDateField {
public CalendarPane() {
setImmediate(true);
setResolution(RESOLUTION_DAY);
setShowISOWeekNumbers(true);
}
private static final long serialVersionUID = -3958329773743250969L;
}
private CalendarPane calPane;
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event) {
synchronized(Lock.getInstance()) {
String date = String.valueOf(event.getProperty().getValue());
Calendar cal = Calendar.getInstance(Locale.FRANCE);
cal.setTime((java.util.Date) event.getProperty().getValue());
setSelectedDate(new NotNullDate(cal));
this.close();
Lock.getInstance().notify();
}
}
}
问题是,当我点击按钮时,它会无限期地等待。 任何想法将不胜感激。
答案 0 :(得分:1)
不要重新发明轮子。你想要的是一个模态对话框。关于他们的问题here可以链接到您需要的所有信息。
答案 1 :(得分:0)
实际上Swing有阻塞对话框。事实上,show()方法会阻塞,直到用户单击按钮并且对话框获得结果。这是通过show()运行它自己的嵌套事件调度程序循环完成的,如下所述:How can Swing dialogs even work?
不幸的是,Vaadin无法做到这一点。但是,有一种名为Coroutines的聪明技术允许您使用Vaadin对话框,就像它们阻塞一样:http://mavi.logdown.com/posts/3488105-vaadin-kotlin-coroutines