【问题标题】:Unable to remove tableitem from table in swt无法从 swt 中的表中删除表项
【发布时间】:2019-03-10 21:45:17
【问题描述】:

当我从 left_group_table(List) 中选择 List5 时,所有属于 List5 的项目都应该从 middle_group_table(Contact) 中删除。如果列表包含多个项目,则应删除联系人表中的所有项目。请在下面找到应用程序的屏幕截图和代码 sn-p。提前致谢!

public static ArrayList<String> allEmailsFortheSelectedList = new ArrayList<String>();
HashMap<Integer, ArrayList<String>> allEmailsForALLSelectedList;

tableCursor.addMouseListener(new MouseListener() {

        @Override
        public void mouseUp(MouseEvent arg0) {
            final int selectionIndex = left_group_table.getSelectionIndex();

            if(left_group_table.getItem(selectionIndex).getChecked()) {
                int tempCount = 0;
                left_group_table.getItem(selectionIndex).setChecked(false);
                TableItem[] items = middle_group_table.getItems();

                if(allEmailsForALLSelectedList.containsKey(selectionIndex)) {
                    allEmailsForALLSelectedList.remove(selectionIndex);
                }

                Set<Entry<Integer, ArrayList<String>>>  set = allEmailsForALLSelectedList.entrySet();
                Iterator<Entry<Integer, ArrayList<String>>> itr = set.iterator(); 
                while(itr.hasNext()) 
                { 
                    HashMap.Entry<Integer, ArrayList<String>> entry = itr.next(); 
                    for(int i=0; i< entry.getValue().size(); i++) {
                        new TableItem(middle_group_table, SWT.NONE);
                        items[tempCount].setText(1, entry.getValue().get(i));
                        tempCount++;
                    }
                }

                tempCount = items.length;
                middle_group_table.setRedraw(true);

            }else {
                int middleGroupTableItemCount = 0;
                left_group_table.getItem(selectionIndex).setChecked(true);
                sendEmailslistName = left_group_table.getItem(selectionIndex).getText(1);

                int listId = SelectionDb.getUserContactListId(sendEmailslistName);

                allEmailsForALLSelectedList.put(selectionIndex, SelectionDb.getAllContactEmail(listId));

                for (int i = 0; i < SelectionDb.getAllContactEmail(listId).size(); i++) {
                    new TableItem(middle_group_table, SWT.NONE);
                }

                middle_group_table.setRedraw(true);

                TableItem[] items = middle_group_table.getItems();
                Set<Entry<Integer, ArrayList<String>>>  set = allEmailsForALLSelectedList.entrySet();
                Iterator<Entry<Integer, ArrayList<String>>> itr = set.iterator(); 
                while(itr.hasNext()) 
                { 
                    HashMap.Entry<Integer, ArrayList<String>> entry = itr.next(); 
                    for(int i=0; i< entry.getValue().size(); i++) {
                        items[middleGroupTableItemCount].setText(1, entry.getValue().get(i));
                        middleGroupTableItemCount++;
                    }
                }
                middleGroupTableItemCount = items.length;
            }

        }

【问题讨论】:

  • 那么你到底在问什么? Table 有很多 remove 方法,你在哪里尝试使用它们?
  • 我要删除右表中属于左表中List5的整行
  • @Kutty 您提供的代码 sn-p 非常不完整。请提供minimal reproducible example 以重现该问题 - 我们可以将其放入 IDE 并运行,而无需猜测上面代码中缺少什么。
  • 要从表中删除所有行removeAll 方法应该使用

标签: java arraylist hashmap set swt


【解决方案1】:

你的表应该有 removeAll() 方法,你可以使用。

middle_group_table.removeAll();

编辑: 要删除单行,您需要获取要删除的元素的正确索引,没有任何 LINQ 的最简单方法是:

First get the right list you need:
List<String> itemsToRemove = ...getting the list5, from your code I don't understand how the list is holding.

Then you can just iterate in reverse way and remove.
for (int i = middle_group_table.getItemCount() - 1; i <= 0; i--)
{
    if (itemsToRemove.contains(items[i].getText()))
        middle_group_table.remove(i);
}

【讨论】:

  • 我只想从表格中删除一行
猜你喜欢
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多