SetDate в textBox?

Я создаю виджеты для даты для моего проекта.

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);
    }

Я добавляю эти виджеты в flexTable в другом классе графического интерфейса

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

В flexTable этот код выше находится внутри iterator и называется дважды.

Как в изображении: testDate a получил на.

Когда я нажимаю на 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);
             }
         }
    }

добавление в flexTable

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

и это работает отлично. Я получил правильные значения.

2 ответа

Решение

Это ссылка на проблему в реализации.

На вашей второй итерации getTimeTxtbx (когда вы создаете текстовое поле Received On), вы устанавливаете локальную переменную timebx в textBoxDisplay экземпляр новой ссылки, которая является текстовым полем "Получено в". Ваш datePicker"s onValueChange Реализация установить текст на timebxследовательно, текстовое поле Received On устанавливается вместо testingDate текстовое поле на вашей второй итерации.

Попробуйте использовать новый экземпляр TextBoxDisplay вместо этого во время итерации.

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

Это выглядит мне textBoxDisplay является одним и тем же экземпляром виджета для testingDate и receiveOn. Это означает, что если полученный On добавлен, он переопределяет дату тестирования, поэтому вы получаете всплывающее окно, когда нажимаете на значок тестирования Дата. Так что вам нужно textBoxDisplay как для testingDate, так и для receiveOn, например: textBoxDisplayTestingDate а также textBoxDisplayReceivedOn

Другие вопросы по тегам