2017-08-24 5 views
0

J'utilise le modèle MVP. Dans ma vue, j'utilise TextBox nommé uiTextBox dans lequel j'ai ajouté mon statut de message de classe enum en utilisant le code suivant dans la méthode initStaticContent.Comment faire un itération sur TextBox?

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

Mon Enum classe est:

public enum MessageStatus { 
    SENDING, SENT, FAILED; 
} 

Et dans mon updateUiWithModel() J'effectuer les étapes suivantes:

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

Tout d'abord, je veux savoir comment itérer dans chaque sur uiTextBox et comptez les éléments dans la zone de texte. Deuxièmement, si j'utilise ListBox au lieu de TextBox et que je veux avoir un cas de commutation dans la Listbox, comment puis-je le faire dans la méthode updateUiWithModel.

Répondre

0

Eh bien, vous pouvez créer une classe TextFieldStatusManipulator qui définit le texte et l'état de visibilité.

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

Ensuite, vous créez un pour chaque TextField, comme si

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

Ensuite, vous les ajouter à une liste et itérer la liste des changements d'état.

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

Merci je considérerai cela comme une autre option mais si je veux manupliate mon code présente comme vous pouvez le voir il y a 3 énumérations dans la classe ENUM et dans la boucle que je veux mettre la condition i Ameen

+0

ou je pense que je n'ai pas besoin de boucle ma zone de texte que je veux juste montrer l'état – Ameen