【问题标题】:How to iterate over TextBox?如何迭代文本框?
【发布时间】:2017-08-24 14:20:54
【问题描述】:

我正在使用 MVP 模式。在我的视图中,我使用了名为 uiTextBox 的 TextBox,我在 initStaticContent 方法中使用以下代码添加了我的枚举类 Message Status。

private void initStaticContent() {
    for (MessageStatus status : EnumSet.allOf(MessageStatus.class))
        uiTextStatus.setText(status.name());
    updateUiWithPermissions();
}

我的枚举类是:

public enum MessageStatus {
    SENDING, SENT, FAILED;
}

在我的 updateUiWithModel() 中,我正在执行以下步骤:

private void updateUiWithModel() {
    if (model == null)
        throw new IllegalStateException("A model must be defined to update the ui.");

    uiTextCreatedOn.setText(model.createdOn);

    uiTextBusinessName.setText(model.businessName);

    uiTextSenderStaffFirstName.setText(model.senderStaffFirstName);

    selectStatus(model.status);

     case SEND:{
        uiTextRecipientEmail.setVisible(true);
        uiTextRecipientSms.setVisible(false);
        uiTextRecipientVoice.setVisible(false);
     }break;

    case SENDING:{
        uiTextRecipientEmail.setVisible(false);
        uiTextRecipientSms.setVisible(true);
        uiTextRecipientVoice.setVisible(false);
    }break;

    case SENT:{
        uiTextRecipientEmail.setVisible(false);
        uiTextRecipientSms.setVisible(false);
        uiTextRecipientVoice.setVisible(true);  
    }break;
    }

    public void selectStatus(MessageStatus status) {
    if(status == null){
        uiTextStatus.setText("");
        return;
    }
    for(int i=0; i < uiTextStatus.getMaxLength(); i++){
        String currentStatus = (uiTextStatus.getText(i));
        if (currentStatus == status.name()) {
            uiListBoxMethod.setSelectedIndex(i);
            break;
    }
}
}

首先,我想知道如何迭代每个 uiTextBox 并计算文本框中的项目。

其次,如果我使用 Listbox 而不是 TextBox,并且我想在 Listbox 中有 switch case,我该如何在方法 updateUiWithModel 中做到这一点。

【问题讨论】:

    标签: java gwt textbox uibinder


    【解决方案1】:

    你可以创建一个 TextFieldStatusManipulator 类来设置文本和可见性状态。

    class TextFieldStatusManipulator {
        private final Function<Model,String> extractString;
        private final Predicate<Status> setVisible;
        private final TextBox textBox;
        public TextFieldStatusManipulator(TextBox box, Function<Model,String> ex, Predicate<Status> sv) {
            textBox = box; extractString = ex; setVisible = sv;
        }
        public void statusChange(Model model) {
            textBox.setText(extractString.apply(model));
            textBox.setVisible(setVisible.test(model.status));
        }
    }
    

    然后为每个 TextField 创建一个,像这样

    TextFieldStatusManipulator createdOnManip = new TextFieldStatusManipulator (uiTextCreatedOn, Model::getCreatedOn, s -> s == Status.SEND);
    

    然后将它们添加到列表中,并根据状态更改迭代列表。

    manipulatorList.forEach(m -> m.statusChange(model));
    

    【讨论】:

    • 谢谢,我会考虑这是另一种选择,但如果我想修改我现在的代码,你可以看到枚举类中有 3 个枚举,而在 for 循环中我想设置条件 i
    • 或者我认为我不需要循环我的文本框,因为我只想显示状态
    猜你喜欢
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2011-11-02
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多