2017-08-24 94 views
0

我正在使用MVP模式。在我的視圖中,我使用了名爲uiTextBox的TextBox,其中我使用initStaticContent方法中的以下代碼添加了枚舉類Message Status。如何迭代TextBox?

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中有切換大小寫,那麼我怎樣才能在updateUiWithModel方法中執行此操作。

回答

0

那麼你可以創建一個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)); 
    } 
} 

然後創建一個每個文本字段,像這樣

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

然後將它們添加到列表,並在迭代狀態更改列表。

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

謝謝,我會認爲這是另一種選擇,但如果我想manupliate我現在的代碼,你可以看到有在枚舉類和枚舉3 for循環我希望把我的條件 Ameen

+0

或我想我不需要循環我的文本框,因爲我只是想顯示狀態 – Ameen