Java 我怎样才能在两次约会之间缩短一张桌子 combobox.addItemListener(新的ItemListener(){ 公共无效itemStateChanged(ItemEvent arg0){ 如果(arg0.getStateChange()==ItemEvent.SELECTED){ 如果(!combobox.getSelectedItem().toString().equals(项[0])){//items[]用于组合框的项。 DefaultTableModel table1=(DefaultTableModel)table.getModel(); 字符串搜索=combobox.getSelectedItem().toString(); TableRowSorter tr=新的TableRowSorter(表1); 表.设置行分拣机(tr); tr.setRowFilter(RowFilter.regexFilter(搜索)); } } } });

Java 我怎样才能在两次约会之间缩短一张桌子 combobox.addItemListener(新的ItemListener(){ 公共无效itemStateChanged(ItemEvent arg0){ 如果(arg0.getStateChange()==ItemEvent.SELECTED){ 如果(!combobox.getSelectedItem().toString().equals(项[0])){//items[]用于组合框的项。 DefaultTableModel table1=(DefaultTableModel)table.getModel(); 字符串搜索=combobox.getSelectedItem().toString(); TableRowSorter tr=新的TableRowSorter(表1); 表.设置行分拣机(tr); tr.setRowFilter(RowFilter.regexFilter(搜索)); } } } });,java,swing,sorting,date,combobox,Java,Swing,Sorting,Date,Combobox,我使用这个代码。当我选择组合框中的一个项目时,它会使用所选项目对表进行排序。我有第二个组合框。假设combobox的名称是combobox2,combobox2的项是“上两个月” 表格的第一列是日期。当我选择combobox2的项目(最近2个月)时,我想对表进行排序。我只想看到最长为2个月的行 例如,如果我发送了字符串(“01/01/2020”),我只希望看到带有(“01/01/2020”)且在该日期之后的行 但是用这个代码我只能看到我发送的日期。我希望我解释得很好。如果你们需要,我可以分享更多

我使用这个代码。当我选择组合框中的一个项目时,它会使用所选项目对表进行排序。我有第二个组合框。假设combobox的名称是combobox2,combobox2的项是“上两个月”

表格的第一列是日期。当我选择combobox2的项目(最近2个月)时,我想对表进行排序。我只想看到最长为2个月的行

例如,如果我发送了字符串(“01/01/2020”),我只希望看到带有(“01/01/2020”)且在该日期之后的行

但是用这个代码我只能看到我发送的日期。我希望我解释得很好。如果你们需要,我可以分享更多的代码

例如,如果我发送了字符串(“01/01/2020”),我只希望看到带有(“01/01/2020”)且在该日期之后的行

您需要使用“日期过滤器”

例如,此筛选器将返回特定日期之后的所有日期:

combobox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent arg0) {
                if(arg0.getStateChange()==ItemEvent.SELECTED) {
                    if(!combobox.getSelectedItem().toString().equals(items[0])) { //items[] for the items of the combobox.
                        DefaultTableModel table1 = (DefaultTableModel)table.getModel();
                        String search =combobox.getSelectedItem().toString();
                        TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(table1);
                        table.setRowSorter(tr);
                        tr.setRowFilter(RowFilter.regexFilter(search));
                    }
                }
            }
        });
阅读
RowFilter
API以了解您可以使用的其他过滤器

注:

您不应该在模型中存储字符串值。您应该将日期存储在表示日期的对象中,然后使用自定义渲染器格式化日期。这将使上方的滤清器正常工作

例如,如果我发送了字符串(“01/01/2020”),我只希望看到带有(“01/01/2020”)且在该日期之后的行

您需要使用“日期过滤器”

例如,此筛选器将返回特定日期之后的所有日期:

combobox.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent arg0) {
                if(arg0.getStateChange()==ItemEvent.SELECTED) {
                    if(!combobox.getSelectedItem().toString().equals(items[0])) { //items[] for the items of the combobox.
                        DefaultTableModel table1 = (DefaultTableModel)table.getModel();
                        String search =combobox.getSelectedItem().toString();
                        TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(table1);
                        table.setRowSorter(tr);
                        tr.setRowFilter(RowFilter.regexFilter(search));
                    }
                }
            }
        });
阅读
RowFilter
API以了解您可以使用的其他过滤器

注:


您不应该在模型中存储字符串值。您应该将日期存储在表示日期的对象中,然后使用自定义渲染器格式化日期。这将允许上面的过滤器正常工作。

如果我将日期设置为这样(Sat-Aug 15 00:00:00 TRT 2020),代码工作正常。但是看起来很糟糕。我需要这个日期(2020年8月1日)。如果我转换它,我就不能对表进行排序。正如我建议的,你需要使用自定义的渲染器来设置日期的显示格式。看,非常感谢。我不知道这一点,所以我第一次不理解你的意思。有什么方法可以避免我们不得不使用设计糟糕、过时很久的
java.util.Date
类?此外,现代的
LocalDate
似乎更符合OP的要求,也更自然。如果我将日期设置为这样(2020年8月15日星期六00:00:00 TRT),代码工作正常。但是看起来很糟糕。我需要这个日期(2020年8月1日)。如果我转换它,我就不能对表进行排序。正如我建议的,你需要使用自定义的渲染器来设置日期的显示格式。看,非常感谢。我不知道这一点,所以我第一次不理解你的意思。有什么方法可以避免我们不得不使用设计糟糕、过时很久的
java.util.Date
类?此外,现代的
LocalDate
似乎更符合OP的要求,也更自然。