如何遍历 TextBox?
How to iterate over TextBox?
我正在使用 MVP 模式。在我的视图中,我使用名为 uiTextBox 的文本框,我在方法 initStaticContent.
中使用以下代码添加了我的枚举 class 消息状态
private void initStaticContent() {
for (MessageStatus status : EnumSet.allOf(MessageStatus.class))
uiTextStatus.setText(status.name());
updateUiWithPermissions();
}
我的枚举 Class 是:
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 方法中实现。
那么您可以创建一个 TextFieldStatusManipulator class 来设置文本和可见性状态。
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));
我正在使用 MVP 模式。在我的视图中,我使用名为 uiTextBox 的文本框,我在方法 initStaticContent.
中使用以下代码添加了我的枚举 class 消息状态private void initStaticContent() {
for (MessageStatus status : EnumSet.allOf(MessageStatus.class))
uiTextStatus.setText(status.name());
updateUiWithPermissions();
}
我的枚举 Class 是:
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 方法中实现。
那么您可以创建一个 TextFieldStatusManipulator class 来设置文本和可见性状态。
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));