【问题标题】:Ext GWT 2.2.5 Collapse DatePickerExt GWT 2.2.5 折叠 DatePicker
【发布时间】:2014-10-16 13:45:34
【问题描述】:

我在我的应用程序中使用 Ext GWT 2.2.5。

我想问你,是否可以使用默认框架工具创建可以通过用户单击折叠和展开的 DatePicker?

请看下面的例子:

我在 Ext GWT Explorer 演示中找不到类似的东西。 请看:http://www.sencha.com/examples-2/#datepicker

谢谢,叶夫根尼

【问题讨论】:

    标签: java datepicker gxt collapsable


    【解决方案1】:

    您可以尝试将 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);
    

    希望这会有所帮助!

    【讨论】:

    • 似乎是一个有趣的解决方案,但我需要查看 datePicker 折叠时选择的日期。请看我提出的方法
    • 你的方法也很好。我相信创建自己的“定制组件”始终是最好的方法。伟大的!!可悲的是,我刚刚开始使用 Stackoverflow,还不能投票给你的答案。回头见!
    【解决方案2】:

    最后我创建了 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);
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 2015-06-23
      • 1970-01-01
      相关资源
      最近更新 更多