【问题标题】:SetDate in textBox?在文本框中设置日期?
【发布时间】:2012-07-24 08:54:06
【问题描述】:

我为我的项目创建日期小部件。

n 对对象的 setProperty 和 getProperty 使用相同的小部件。

public TextBox getTimeTxtbx() {
        // TODO Auto-generated method stub

        timebx =new TextBox();

        timebx.setReadOnly(true);
        final PopupPanel popupPanel=new PopupPanel(true);
        final DatePicker datePicker=new DatePicker();

        datePicker.addValueChangeHandler(new ValueChangeHandler<Date>() {

            public void onValueChange(ValueChangeEvent<Date> event) {
                // TODO Auto-generated method stub

                Date date=event.getValue();
                timebx.setText(DateTimeFormat.getFormat("EEE MMM dd HH:mm:ss z yyyy").format(date));
                popupPanel.hide();
            }


        });
        popupPanel.setWidget(datePicker);
        timebx.addClickHandler(new ClickHandler() {

            public void onClick(ClickEvent event) {
                // TODO Auto-generated method stub
                String strDate = timebx.getText();
                System.out.println(" strDate " +strDate);
                DateTimeFormat format = DateTimeFormat.getFormat("[EEE MMM dd HH:mm:ss z yyyy]");
                try {  
                      Date selDate = (Date)format.parse(strDate); 
                      datePicker.setValue(selDate, true);
                    } catch(Exception pe){
                     // setting current date
                        System.out.println("error" +pe);
                     datePicker.setValue(new Date(), true);
                    }
                int x=timebx.getAbsoluteLeft();
                int y=timebx.getAbsoluteTop();
                popupPanel.setPopupPosition(x, y+20);
                popupPanel.show();
            }
        });
        return timebx;
    }
    public void setTimebx(String string) {
        // TODO Auto-generated method stub
        timebx.setText(string);
    }

我在不同 gui 类的 flexTable 中添加这个小部件

flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx());
textBoxDisplay.setTimebx(customProperty.getValues().toString());

在 flexTable 中,上面的代码位于 iterator 内,并被称为 Twice

如图片中所示:testDate 收到日期。

当我点击 testDate 时,Received On 的值发生了变化


编辑

public ListBox getBooleanBox() {
        // TODO Auto-generated method stub
        selectBoolean = new ListBox(false);
        //selectBoolean.setName(title);
        selectBoolean.setStyleName("cmis-Customproperties-TextBox");
        selectBoolean.setSize("150px", "20px");
        selectBoolean.addItem("True","True");
        selectBoolean.addItem("False", "False");
        return selectBoolean;
    }
    public void setBooleanBox(String value){
         int itemCount = selectBoolean.getItemCount();
         for(int i = 0 ;i < itemCount;i++){
             if(selectBoolean.getItemText(i).equalsIgnoreCase(value)){
                 selectBoolean.setSelectedIndex(i);
             }
         }
    }

添加弹性表

customPropertyTabel.setWidget(i, j,textBoxDisplay.getBooleanBox());
textBoxDisplay.setBooleanBox(removeSymbol(customProperty.getValues().toString()));

这工作得很好。 我得到了正确的值。

【问题讨论】:

  • @Keppil 当我单击 testDate 的文本框时,弹出窗口位于 ReceivedOn 的文本框上,并且 receivedOn 文本框的值发生了变化

标签: java gwt gwt2 gwt-widgets


【解决方案1】:

这是实现中的引用问题。

getTimeTxtbx 的第二次迭代中(当您创建 Received On 文本框时),您已将 textBoxDisplay 实例中的局部变量 timebx 设置为 Received On 文本框的新引用。您的datePickeronValueChange 实现将文本设置为timebx,因此在您的第二次迭代中设置了Received On 文本框而不是testingDate 文本框。

尝试在迭代期间使用TextBoxDisplay 的新实例。

TextBoxDisplay textBoxDisplay = new TextBoxDisplay();
flexTable.setWidget(i, j,textBoxDisplay.getTimeTxtbx());
textBoxDisplay.setTimebx(customProperty.getValues().toString());

【讨论】:

    【解决方案2】:

    在我看来textBoxDisplay 是 testingDate 和 receivedOn 的同一个小部件实例。这意味着如果添加了 receivedOn,它将覆盖 testingDate,因此当您单击 testingDate 图标时,您会看到弹出窗口。所以你需要一个 textBoxDisplay 用于 testingDate 和 receivedOn,例如:textBoxDisplayTestingDatetextBoxDisplayReceivedOn

    【讨论】:

    • 我也怀疑实例化对象
    • 我正在使用布尔列表进行类似的编码.. AnimationEnabled 和 testingBoolean.. 它工作正常.. 请检查编辑区域。
    • 使用布尔列表,您只需初始化列表框而不添加处理程序。因此,selectBoolean 在初始化阶段之外不会被访问。但selectBoolean 将是最后一个初始化的列表框。因此,如果您添加更改处理程序,这意味着如果您的任何列表框更改值并且您在处理程序中读取 selectBoolean 的值,它将读取最后一个初始化列表框的值。
    猜你喜欢
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多