2016-05-12 81 views
1

我有两个组合框他们每个人的筛选我的JTable的diferent行,我想要做的是十个分量上的每个用户选择我的过滤器,绑定两个JComboBox的过滤器

在此刻

首先组合框选择选项A和过滤仅显示选项表阿

第二组合框选择选项B和表过滤仅显示选项B

我需要的是:

首先组合框选择选项A和过滤显示用于选择匹配的情况下表A中

然后

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

这是我的组合框代码,用于过滤单个表:

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);     
    } 
}); 

那么,有没有一种方式,当选择一个选项时总是匹配从两个组合框的情况?

回答

2

使用RowFilter.andFilter()允许多个过滤器应用于单个JTableAND逻辑(仅当过滤器是真的,该项目将显示出来)(也有一个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));   
    } 
}); 
+0

OMG,这是完美的正是我需要非常感谢你! –

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

希望它有帮助!

相关问题