首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有复选框的菜单来过滤Java中的Jtable

带有复选框的菜单来过滤Java中的Jtable
EN

Stack Overflow用户
提问于 2018-10-10 12:19:51
回答 1查看 677关注 0票数 0

在我的程序中,我有带有项目的Jtable。我希望能够根据值(一些布尔值,一些字符串)过滤这些项。

我已经尝试/做了什么:,我做了一个带有项目和复选框的下拉列表,在那里我可以从下拉列表中选择,程序过滤表。如果选择了第二个排序(没有最佳名称),它将进一步过滤,否则它将使用我从数据库中提取的“新数据”进行筛选,并将其放入JTable。

代码做什么:我真正想要的是一个菜单/模拟外观,在那里有可能有子菜单的包含复选框,在那里我可以检查我想要过滤的内容。我用JCheckBoxMenuItem做了一个带有子菜单的菜单,我做了ItemListeners,但是我必须为每个子菜单做一个侦听器,我不知道如何通过菜单检查我已经检查过的值。因此,我只获得Jtable的“新鲜”列表或1过滤器。

问题:如何启用多个过滤器?以及如何使一个公共侦听器能够针对我在菜单中单击的复选框和先前单击的复选框进行筛选?

代码语言:javascript
复制
_sortComboBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            String value = _sortComboBox.getSelectedItem().toString();

            List<StakeholderRequirement> listToSort = new ArrayList<StakeholderRequirement>();

            if(_secondSortCheckBox.isSelected() == true) {
                for(int i = 0; i < _stakeholderRequirementTable.getRowCount(); i++) {
                    listToSort.add(_stakeholderRequirementListTableModel.getRequirementAt(i));                  
                }
            } else {
                listToSort = _project.getStakeholderRequirementList();
            }

            List<StakeholderRequirement> filteredList;

            switch (value) {
                case "All":
                    _stakeholderRequirementListTableModel.setStakeholderReqList(_project.getStakeholderRequirementList());
                    break;
                case "Accepted":
                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isAccepted() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);
                    break;
                case "Approved":
                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isApproved() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);
                    break;
                case "Specified":
                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isSpecified() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);
                    break;
                case "Validated":
                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isValidated() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);
                    break;
                case "Verified":
                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isVerified() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);
                    break;
            }
            _stakeholderRequirementListTableModel.fireTableDataChanged();

        }

    });

代码语言:javascript
复制
JMenu _requirementIndicators = new JMenu("Status Indicators"); 
JCheckBoxMenuItem _RIAccepted = new JCheckBoxMenuItem("Accepted");
        _RIAccepted.addItemListener( new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {

                List<StakeholderRequirement> listToSort = new ArrayList<StakeholderRequirement>();

                listToSort = _project.getStakeholderRequirementList();

                if(e.getStateChange()== 1) {
                    List<StakeholderRequirement> filteredList;

                    filteredList = listToSort.stream().filter(StakeholderRequirement -> StakeholderRequirement.isAccepted() == true).collect(Collectors.toList());
                    _stakeholderRequirementListTableModel.setStakeholderReqList(filteredList);

                } else {
                    _stakeholderRequirementListTableModel.setStakeholderReqList(listToSort);
                }

                _stakeholderRequirementListTableModel.fireTableDataChanged();


            }

        });
EN

回答 1

Stack Overflow用户

发布于 2018-10-10 14:44:02

阅读有关分类过滤的Swing教程中的部分,了解过滤基础知识。

本教程包含一个工作示例,该示例在用户将文本键入文本字段时进行筛选。

在这种情况下,用户将选择一个值,然后使用所选的值创建筛选器。

如何启用多个过滤器?

代码语言:javascript
复制
//rf = RowFilter.regexFilter("^" + filterText.getText(), 0); // match from beginning
List<RowFilter<Object,Object>> filters = new ArrayList<RowFilter<Object,Object>>(2);
filters.add(RowFilter.regexFilter(filterText.getText(), 0));
filters.add(RowFilter.regexFilter(filterText.getText(), 1));
rf = RowFilter.andFilter(filters);

以上说明如何修改教程中的筛选器,以检查表中两列的值。阅读RowFilter API。您可以根据需要使用andFilter或orFilter。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52740126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档