绑定两个JComboBox过滤器

时间:2016-05-12 16:39:01

标签: java swing combobox

我有两个ComboBox,每个都过滤掉我的JTable的不同行,我想做的是在每个用户选择上保留我的过滤器,

示例

目前

第一个ComboBox选择选项A,表格被过滤,仅显示选项A

第二个ComboBox选择选项B并过滤表格,仅显示选项B

我需要的是:

第一个ComboBox选择选项A并过滤表格,显示选项A的匹配案例

然后

第二个ComboBox选择选项B和表必须显示第一个ComboBox的匹配大小写的值和显示Option' A + B'

的第二个ComboBox的大小写

这是我的ComboBox代码,可以单独过滤表格

comboBox.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent event) {
        RowFilter<DefaultTableModel, Object> rf  = RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2);
        sorter.setRowFilter(rf);
    }
});

comboBox_1.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent event) {
        RowFilter<DefaultTableModel, Object> rf  = RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3);
        sorter.setRowFilter(rf);                
    }
});

当选择一个选项时,有没有办法在两个ComboBox中始终匹配案例?

2 个答案:

答案 0 :(得分:2)

使用RowFilter.andFilter()允许多个过滤器应用于具有JTable逻辑的单个AND(仅当两个过滤器都为真时,项目才会显示)(还有一个过滤器) ORNOT,...)。

尚未测试,但我想这样的事情可行:

// Collection of filters to be applied to your table
List<RowFilter<DefaultTableModel, Object>> filters = new ArrayList<>();

comboBox.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        if(filters.isEmpty())
            filters.add(RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2));
        else
            filters.set(0, RowFilter.regexFilter(comboBox.getSelectedItem().toString(), 2));
        // Apply filters
        sorter.setRowFilter(RowFilter.andFilter(filters));
    }
});

comboBox_1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        if(filters.size() < 2)
            filters.add(RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3));
        else
            filters.set(1, RowFilter.regexFilter(comboBox_1.getSelectedItem().toString(), 3));
        // Apply filters
        sorter.setRowFilter(RowFilter.andFilter(filters));           
    }
});

答案 1 :(得分:0)

您可以使用类似的东西,它使用ComboBoxModel,因此您可以动态地向JComboBox添加元素:

Integer[] optionsForA = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 
JComboBox comboBoxA = new JComboBox(optionsForA);//A
Vector comboItems = newVector();
comboItems.add("A");
comboItems.add("B");
comboItems.add("C");
comboItems.add("D");
comboItems.add("E");
final DefaultComboBoxModel mod = new DefaultComboBoxModel(comboItems);
JComboBox comboBoxB = new JComboBox(mod);//B

actionsCB.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            if()//your condition { 

                for (int i = numbers.lenght; i < numbers.length + mod.size() ; i++) {
                    mod.addElement(optionsForA[i]); //add options from A to B

                }            
            }
        }
    });

有关向JComboBox添加选项的更多信息,请查看以下帖子:Dynamically adding items to a JComboBox 或者DefaultComboBoxModel API:https://docs.oracle.com/javase/7/docs/api/javax/swing/DefaultComboBoxModel.html

希望它有所帮助!