2017-08-24 7 views
0

Ich verwende MVP-Muster. In meiner Ansicht benutze ich TextBox mit dem Namen uiTextBox, in dem ich meinen enum class Message Status mit dem folgenden Code in der Methode initStaticContent hinzugefügt habe.Wie man über TextBox iteriert?

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

Meine Enum Klasse:

public enum MessageStatus { 
    SENDING, SENT, FAILED; 
} 

Und in meinem updateUiWithModel() Ich folgende Schritte am auszuführen:

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

Zum einen möchte ich wissen, wie für jeden iterieren in über UiTextBox und zählen Sie die Elemente in der Textbox.

Zweitens, wenn ich Listbox anstelle von TextBox verwenden und ich habe Schalter Fall in der Listbox, wie kann ich es in Methode UpdateUiWithModel tun.

Antwort

0

Nun können Sie eine TextFieldStatusManipulator-Klasse erstellen, die Text und Sichtbarkeitsstatus setzt.

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

Dann erstellen Sie eine für jede TextField-, wie so

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

Dann fügen Sie sie in eine Liste und wiederholen Sie die Liste auf Statusänderungen.

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

Dank Ich werde dies als eine weitere Option in Betracht ziehen, aber wenn ich manupliate möchte meinen jetzigen Code, wie Sie es 3 Aufzählungen in der Enum-Klasse und in der for-Schleife die Bedingung i setzen Ich möchte Ameen

+0

oder ich denke, ich brauche keine Schleife für meine Textbox, da ich nur den Status anzeigen möchte – Ameen

Verwandte Themen