我在我的应用程序中使用 Ext GWT 2.2.5。
我想问你,是否可以使用默认框架工具创建可以通过用户单击折叠和展开的 DatePicker?
请看下面的例子:
我在 Ext GWT Explorer Demo 中找不到类似的东西。请参阅:http ://www.sencha.com/examples-2/#datepicker
谢谢, 叶夫根尼
我在我的应用程序中使用 Ext GWT 2.2.5。
我想问你,是否可以使用默认框架工具创建可以通过用户单击折叠和展开的 DatePicker?
请看下面的例子:
我在 Ext GWT Explorer Demo 中找不到类似的东西。请参阅:http ://www.sencha.com/examples-2/#datepicker
谢谢, 叶夫根尼
您可以尝试将 DatePicker 放在 ContentPanel 中,并将面板布局设置为 FitLayout,这样 DatePicker 将采用面板大小。
然后您只需将面板设置为可折叠并将其属性“hideCollapseTool”设置为 false。
这将在 ContentPanel 中显示您的 DatePicker,您将能够使用面板标题上的折叠按钮来折叠它。
一个例子:
DatePicker miDatePicker = new DatePicker();
ContentPanel miPanel= new ContentPanel(); // new panel
miPanel.setLayout(new FitLayout()); // set layout (so DatePicker resize inside)
miPanel.setAnimCollapse(false); // set animation (optional)
miPanel.setHeading("Choose a date"); // set a header text
miPanel.setCollapsible(true); // allow panel to collapse
miPanel.setHideCollapseTool(false); // show the collapse button
miPanel.setBorders(true); // show border of panel
miPanel.add(miDatePicker);
希望这可以帮助!
最后我创建了 DateAndTimeField 类,请看:
public class DateAndTimeField extends LayoutContainer {
public static final String DATE_FORMAT = "MM/dd/yyyy";
public static final String TIME_AND_DATE_FORMAT = "MM/dd/yyyy HH:mm";
public static final String DATE_REGEX = "^\\d{4}/\\d{2}/\\d{2}$";
public static final String TIME_REGEX = "^\\d{2}:\\d{2}$";
private TextField<String> dateText;
private TextField<String> timeTextField;
public DateAndTimeField() {
TableLayout tableLayout = new TableLayout();
tableLayout.setColumns(4);
tableLayout.setCellSpacing(5);
this.setLayout(tableLayout);
this.add(new Label("Date: "));
this.add(getDateTextField());
final DatePicker datePicker = getDatePicker();
this.add(getDatePickerButton(datePicker));
this.add(datePicker);
this.add(new Label("Time: "));
this.add(getTimeTextField());
this.add(timeTextField);
}
private TextField<String> getTimeTextField() {
if (timeTextField == null) {
timeTextField = new TextField<String>();
timeTextField.setEmptyText("HH:mm");
timeTextField.setEnabled(false);
timeTextField.setWidth(100);
timeTextField.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
return value.matches(TIME_REGEX) ? null : "not a valid value";
}
});
}
return timeTextField;
}
private DatePicker getDatePicker() {
final DatePicker datePicker = new DatePicker();
datePicker.addListener(Events.Select, new Listener<ComponentEvent>() {
public void handleEvent(ComponentEvent be) {
String date = DateTimeFormat.getFormat(DATE_FORMAT).format(datePicker.getValue());
dateText.setValue(date);
datePicker.hide();
timeTextField.setEnabled(true);
}
});
datePicker.hide();
return datePicker;
}
private Button getDatePickerButton(final DatePicker datePicker) {
Button button = new Button();
button.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent buttonEvent) {
if (datePicker.isVisible()) {
datePicker.hide();
} else {
datePicker.show();
}
}
});
button.setIcon(GXT.IMAGES.grid_groupBy());
return button;
}
private TextField<String> getDateTextField() {
if (dateText == null) {
dateText = new TextField<String>();
dateText.setWidth(100);
dateText.setReadOnly(true);
dateText.setEmptyText(DATE_FORMAT);
}
return dateText;
}
public Date getSelectedDate() {
if (getDateTextField().getValue().matches(DATE_REGEX)) {
StringBuilder dateAndTimeText = new StringBuilder(dateText.getValue());
if (timeTextField.getValue().matches(TIME_REGEX)) {
dateAndTimeText.append(" ").append(timeTextField.getValue());
}
return DateTimeFormat.getFormat(TIME_AND_DATE_FORMAT).parse(dateAndTimeText.toString());
} else {
return null;
}
}
public void reset() {
getDateTextField().clear();
getTimeTextField().clear();
getDatePicker().hide();
getTimeTextField().setEnabled(false);
}
}