我有两个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中始终匹配案例?
答案 0 :(得分:2)
使用RowFilter.andFilter()允许多个过滤器应用于具有JTable
逻辑的单个AND
(仅当两个过滤器都为真时,项目才会显示)(还有一个过滤器) OR
,NOT
,...)。
尚未测试,但我想这样的事情可行:
// 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
希望它有所帮助!