【问题标题】:how to prenvent an existed name to rewrite如何防止已存在的名称被重写
【发布时间】:2013-08-23 09:21:33
【问题描述】:

当我在 nameText (类型 Text )中输入库名称并且该名称已存在于库列表中时,我遇到了一个问题,按钮 ok 被阻止,我无法执行此操作(一条消息显示并通知我会写另一个名字)

我不确切知道我使用什么 treeSet 或 arrayList 以及如何使用? 代码是:

public static void removeDuplicates(List list)  
{  
    Set set = new HashSet();  
    List newList = new ArrayList();  
    for (Iterator iter = list.iterator(); iter.hasNext(); ) {  
        Object element = iter.next();  
        if (set.add(element))  
            newList.add(element);  
    }  
    list.clear();  
    list.addAll(newList);  
}  

在上下文中:

 public class EditLibraryDialog extends Dialog implements ItemListener {

ILibrary library;
Text pathText;
Text nameText;
static boolean okPressed;

public EditLibraryDialog(Shell parent) {
    super(parent);
    library = null;
}

public EditLibraryDialog(Shell parent, ILibrary library) {
    super(parent);
    this.library = library;
}

public ILibrary getLibrary() {
    return library;
}

public boolean open() {
    return open(null);
}

public boolean open(String message) {

    final Shell parent = getParent();
    final Shell dialog = new Shell(parent, SWT.DIALOG_TRIM
            | SWT.APPLICATION_MODAL);

    okPressed = false;

    dialog.setSize(700, 150);
    dialog.setLayout(new GridLayout(4, false));
    GridData gridData = new GridData();
    dialog.setLayoutData(gridData);

    Label l;

    if (message != null) {
        l = new Label(dialog, SWT.NULL);
        l.setText(message);
    }

    l = new Label(dialog, SWT.NULL);

    l.setText("Name");

    nameText = new Text(dialog, SWT.BORDER);

    l = new Label(dialog, SWT.NULL);
    l = new Label(dialog, SWT.NULL);
    l = new Label(dialog, SWT.NULL);
    l.setText("Path");

    pathText = new Text(dialog, SWT.BORDER);

    });

    if (library == null) {
        dialog.setText("Add Library");
    } else {
        dialog.setText("Edit Library");
        nameText.setText(library.getName());
        pathText.setText(library.getPath());
    }

    final Button okButton = new Button(dialog, SWT.PUSH);
    okButton.setText("Ok");
    GridData gridData4 = new GridData(GridData.END, GridData.CENTER, false,
            false);
    gridData4.horizontalSpan = 3;
    gridData4.horizontalIndent = 20;
    okButton.setLayoutData(gridData4);
    okButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            String id;
            if (library != null) {
                id = library.getId();
            } else {
                id = UUID.randomUUID().toString();
            }
            library = new LibraryFactory().create(id, nameText.getText(),
                    pathText.getText());
            dialog.dispose();
            okPressed = true;



    }});




    nameText.addModifyListener(new ModifyListener() {
        String lastValidText = "";

        @Override
        public void modifyText(ModifyEvent e) {
            // avoid setting invalid values for the name text field
            String textValue = ((Text) e.getSource()).getText();
            if (parseName(textValue)) {
                lastValidText = textValue;
                okButton.setEnabled(textValue.equals("") ? false : true);
            } else {
                nameText.setText(lastValidText);
            }
        }

    });

    nameText.addVerifyListener(new VerifyListener() {
        @Override
        public void verifyText(VerifyEvent e) {
            Pattern pattern = Pattern.compile("[\\w| ]*");
            Matcher matcher = pattern.matcher(e.text);
            e.doit = matcher.matches();

        }
    });

    pathText.addVerifyListener(new VerifyListener() {
        @Override
        public void verifyText(VerifyEvent e) {
            Pattern pattern = Pattern.compile("[a-zA-Z0-9_.-\\\\\\/\\$]*");
            Matcher matcher = pattern.matcher(e.text);
            e.doit = matcher.matches();
        }
    });

    Button cancelButton = new Button(dialog, SWT.PUSH);
    cancelButton.setText("Cancel");

    cancelButton.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            dialog.dispose();
        }
    });


      public static void removeDuplicates(List list)  
      {  
        Set set = new HashSet();  
        List newList = new ArrayList();  
        for (Iterator iter = list.iterator(); iter.hasNext(); ) {  
          Object element = iter.next();  
          if (set.add(element))  
            newList.add(element);  
        }  
        list.clear();  
        list.addAll(newList);  
      }  




    if (nameText.getText().equals(""))
        okButton.setEnabled(false);
        JOptionPane.showMessageDialog(null,"Existed Library"); }


    dialog.open();
    Display display = parent.getDisplay();
    while (!dialog.isDisposed()) {
        if (!display.readAndDispatch())
            display.sleep();
    }
    return okPressed;
}

private boolean parseName(String newText) {
    return true;
}

@Override
public void itemStateChanged(ItemEvent e) {
    // TODO Auto-generated method stub

}
      }

【问题讨论】:

  • 请缩减到相关部分,以了解重现您的问题所需的内容。没有人愿意涉足这么多代码。
  • 我并没有真正得到你想要的,或者问题出在哪里,但是重复的已经在public static void removeDuplicates(List list)中删除了
  • @Theolodis 方法 public static void removeDuplicates(List list) 不运行,我尝试修改它,你能帮我如何添加或删除以使其工作
  • @Tichodroma 我想添加一个方法,当我添加一个新名称(在 nameText 中)时,我可以验证该名称是否存在,如果它不存在,它将被添加到库列表,否则我必须修改此名称

标签: java arraylist treeset


【解决方案1】:

使用ArrayListVector 并使用contains 方法检查。

 Vector<String> v = new Vector<String>();
 v.add("apple");
 v.add("mango");

 if(v.contains("apple")) {
     //element already in list, do something
 }
 else {
     //element not in list, do something
 }

【讨论】:

  • 你有例子吗? ,因为我是java新手
  • 请帮帮我,我想用你的Idee,但我不知道怎么用
猜你喜欢
  • 2020-06-29
  • 2013-11-23
  • 2017-10-25
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多