ฉันจะสร้าง TableRowShorter ระหว่างสองวันที่ได้อย่างไร

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

ฉันใช้รหัสนี้ เมื่อฉันเลือกรายการของกล่องคอมโบมันจะเรียงตารางตามรายการที่เลือก ฉันมีคอมโบบ็อกซ์ตัวที่สอง สมมติว่าชื่อของ combobox คือ combobox2 และรายการของ combobox2 คือ "2 เดือนล่าสุด"

คอลัมน์แรกของตารางมีไว้สำหรับวันที่ เมื่อฉันเลือกรายการของ combobox2 (2 เดือนล่าสุด) ฉันต้องการจัดเรียงตาราง ฉันต้องการดูแถวที่มีอายุไม่เกิน 2 เดือน

ตัวอย่างเช่นถ้าฉันส่ง String ("01/01/2020") ฉันต้องการดูเฉพาะแถวที่มี ("01/01/2020") และหลังจากวันที่นี้

แต่ด้วยรหัสนี้ฉันจะเห็นวันที่ส่งเท่านั้น ฉันหวังว่าฉันจะอธิบายได้ดี ฉันสามารถแบ่งปันรหัสเพิ่มเติมได้หากพวกคุณต้องการ

คำตอบ

2 camickr Aug 19 2020 at 14:02

ตัวอย่างเช่นถ้าฉันส่ง String ("01/01/2020") ฉันต้องการดูเฉพาะแถวที่มี ("01/01/2020") และหลังจากวันที่นี้

คุณต้องใช้ "ตัวกรองวันที่"

ตัวอย่างเช่นตัวกรองนี้จะส่งคืนวันที่ทั้งหมดหลังจากวันที่ระบุ:

RowFilter.dateFilter(ComparisonType.AFTER, new Date());

อ่านRowFilterAPI สำหรับตัวกรองอื่น ๆ ที่คุณสามารถใช้ได้

บันทึก:

คุณไม่ควรจัดเก็บค่า String ในโมเดล คุณควรเก็บวันที่ไว้ในวัตถุที่แสดงวันที่จากนั้นใช้ตัวแสดงผลแบบกำหนดเองเพื่อจัดรูปแบบวันที่ วิธีนี้จะช่วยให้ตัวกรองจากด้านบนทำงานได้อย่างถูกต้อง