В моей программе у меня есть Jtable с элементами.Я хочу иметь возможность фильтровать эти элементы на основе значений (некоторые логические и некоторые строки).
Что я пробовал / сделал: Я сделал выпадающий список с элементами и флажком , где я могу выбрать из выпадающего списка, и программа фильтрует таблицу.Если выбран второй сорт (без лучшего имени), он будет фильтроваться дальше, иначе он будет фильтровать по «свежим данным», которые я извлекаю из базы данных и помещаю в JTable.
Что делает код : что я действительно хочу, так это меню / нечто симулированное во внешнем виде, где можно иметь флажки, содержащие подменю, где я могу проверить, что я хочу отфильтроватьна.Я сделал меню с подменю с помощью JCheckBoxMenuItem's.И я сделал ItemListeners, но я должен сделать слушатель для каждого, и я не знаю, как проверить, какие из них через меню, для каких значений я уже проверил.Поэтому я получаю только «свежий» список для Jtable или 1 фильтр.
Вопрос: Как включить несколько фильтров?и как мне сделать обычного слушателя, который будет фильтровать в зависимости от того, какой флажок я нажимаю в моем меню и те, которые были нажаты ранее?
_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();
}
});
.
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();
}
});