Java SWT удалить элемент из ListViewer - PullRequest
0 голосов
/ 04 июля 2018

Я пишу графический интерфейс с SWT. Вы можете выбрать файл (ы), нажав на кнопку (например, Обзор), и они добавили в ListViewer по имени. Я создал новую кнопку для удаления файлов из списка, но она не работает для меня. Это необходимый кусок кода, я думаю:

    ListViewer listViewer = new ListViewer(shlPmcompare, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
    List list = listViewer.getList();
    list.setBounds(331, 11, 305, 100);

    btnBrowse.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            FileDialog fileBrowse = new FileDialog(shlPmcompare, SWT.MULTI);
            fileBrowse.setFilterExtensions(new String[] {"*.txt"});
            String filePath = fileBrowse.open();
            if (filePath != null) {
                StringBuffer buf = new StringBuffer();
                String[] files = fileBrowse.getFileNames();
                for (int i = 0, n = files.length; i < n; i++) {
                  buf.append(fileBrowse.getFilterPath());
                  if (buf.charAt(buf.length() - 1) != File.separatorChar) {
                    buf.append(File.separatorChar);
                  }
                  buf.append(files[i]);
                  buf.append("\n");
                }
                for (int i = 0, n = files.length; i < n; i++) {
                    list.add(files[i], 0);
                }
            }
        }
    });

    btnRemoveFile.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            IStructuredSelection selectionFile = (IStructuredSelection)listViewer.getSelection();
            List RemoveFile = (List)selectionFile.getFirstElement();
            if(RemoveFile == null) {
                MessageDialog.openError(shlPmcompare, "Removing Error", "You need to select file first.");
                return;
            }
            list.remove(RemoveFile);
            listViewer.refresh(false);
        }
    });

1 Ответ

0 голосов
/ 04 июля 2018

Когда вы используете программу просмотра JFace, например ListViewer, с несколькими исключениями, вы не должны вызывать какие-либо методы для базового элемента управления (List в данном случае). Зритель управляет элементом управления, и вы должны использовать только методы зрителя, чтобы изменить его.

Чтобы удалить выборку из списка, вы вызываете метод ListViewer remove, не List.remove.

Итак, это программа просмотра, которая просто отображает некоторые строки:

ListViewer listViewer = new ListViewer(shell, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
listViewer.getList().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

listViewer.setContentProvider(ArrayContentProvider.getInstance());

ArrayList<String> contents = new ArrayList<>();
contents.add("a");
contents.add("b");
contents.add("c");

listViewer.setInput(contents);

Button btnRemoveFile = new Button(shell, SWT.PUSH);
btnRemoveFile.setText("Remove");
btnRemoveFile.addSelectionListener(new SelectionAdapter() {
  @Override
  public void widgetSelected(final SelectionEvent e) {
      IStructuredSelection selectionFile = listViewer.getStructuredSelection();
      final Object removeFile = selectionFile.getFirstElement();
      // TODO check for no selection

      listViewer.remove(removeFile);

      contents.remove(removeFile);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...