Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT从ListViewer中删除元素_Java_Swt_Jface - Fatal编程技术网

Java SWT从ListViewer中删除元素

Java SWT从ListViewer中删除元素,java,swt,jface,Java,Swt,Jface,我正在用SWT编写GUI。您可以通过单击按钮(如浏览)来选择文件,并通过名称将其添加到ListViewer中。我已经创建了一个新的按钮来从列表中删除文件,但它不适合我。 我想这就是所需要的代码: ListViewer listViewer = new ListViewer(shlPmcompare, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); List list = listViewer.getList(); list.setBo

我正在用SWT编写GUI。您可以通过单击按钮(如浏览)来选择文件,并通过名称将其添加到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);
        }
    });
ListViewer ListViewer=新的ListViewer(shlPmcompare,SWT.BORDER | SWT.V|u SCROLL | SWT.H|u SCROLL);
List=listViewer.getList();
立根(331,11,305,100);
btnBrowse.addSelectionListener(新的SelectionAdapter(){
公共无效WidgeSelected(SelectionEvent e){
FileDialog fileBrowse=newfiledialog(shlPmcompare,SWT.MULTI);
fileBrowse.setFilterExtensions(新字符串[]{“*.txt”});
字符串filePath=fileBrowse.open();
if(filePath!=null){
StringBuffer buf=新的StringBuffer();
String[]files=fileBrowse.getFileNames();
for(int i=0,n=files.length;i
当您使用JFace查看器(如
ListViewer
)时,除了少数例外,您不应该调用底层控件上的任何方法(
List
)。查看器管理控件,您应该只使用查看器的方法来更改它

要从列表中删除所选内容,请调用
ListViewer
remove
方法,not
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);
  }
});
ListViewer ListViewer=新的ListViewer(shell,SWT.BORDER | SWT.V|u SCROLL | SWT.H|u SCROLL);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
setContentProvider(ArrayContentProvider.getInstance());
ArrayList contents=新的ArrayList();
内容。添加(“a”);
内容。添加(“b”);
内容。添加(“c”);
setInput(内容);
按钮btnRemoveFile=新按钮(shell,SWT.PUSH);
btnRemoveFile.setText(“删除”);
btnRemoveFile.addSelectionListener(新的SelectionAdapter(){
@凌驾
公共无效WidgeSelected(最终选择事件e){
IsStructuredSelectionFile=listViewer.getStructuredSelection();
final Object removeFile=selectionFile.getFirstElement();
//TODO检查是否没有选择
移除(移除文件);
内容。删除(removeFile);
}
});

当您使用JFace查看器(如
ListViewer
)时,除了少数例外,您不应该调用底层控件上的任何方法(
List
)。查看器管理控件,您应该只使用查看器的方法来更改它

要从列表中删除所选内容,请调用
ListViewer
remove
方法,not
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);
  }
});
ListViewer ListViewer=新的ListViewer(shell,SWT.BORDER | SWT.V|u SCROLL | SWT.H|u SCROLL);
setLayoutData(新的GridData(SWT.FILL,SWT.FILL,true,true));
setContentProvider(ArrayContentProvider.getInstance());
ArrayList contents=新的ArrayList();
内容。添加(“a”);
内容。添加(“b”);
内容。添加(“c”);
setInput(内容);
按钮btnRemoveFile=新按钮(shell,SWT.PUSH);
btnRemoveFile.setText(“删除”);
btnRemoveFile.addSelectionListener(新的SelectionAdapter(){
@凌驾
公共无效WidgeSelected(最终选择事件e){
IsStructuredSelectionFile=listViewer.getStructuredSelection();
final Object removeFile=selectionFile.getFirstElement();
//TODO检查是否没有选择
移除(移除文件);
内容。删除(removeFile);
}
});

1。它仍然不工作,它总是进入IF语句。。2.我不明白我应该在“待办事项”部分写什么。您没有向我们显示足够的代码来进一步提供帮助,我们需要了解您如何将内容放入列表查看器。您的内容查看器是什么?您的
setInput
调用是什么?向我们显示一个正确的列表。您正在将内容直接添加到
列表
控件-如果您使用的是
列表查看器
,则无法执行此操作。要么完全摆脱
ListViewer
,只使用
List
,要么继续使用
ListViewer
,使用内容提供者、标签提供者和
setInput
调用。你不能把事情搞混。你能编辑一下你放在这里的代码吗?我想了解你的意思,并与我的代码进行比较。。对我来说会容易些。非常感谢。如果你想使用挫折,你可以使用挫折,但这是一种拙劣的练习。学习使用布局。它仍然不工作,它总是进入IF语句。。2.我不明白我应该在“待办事项”部分写什么。您没有向我们显示足够的代码来进一步提供帮助,我们需要了解您如何将内容放入列表查看器。您的内容查看器是什么?您的
setInput
调用是什么?给我们看一个合适的。你是在直接向t添加东西