1+ import java .text .ParseException ;
2+ import java .awt .Component ;
3+ import java .util .Calendar ;
4+ import java .util .Date ;
5+ import java .text .SimpleDateFormat ;
6+ import java .text .DateFormat ;
7+ import javax .swing .JPanel ;
8+ import java .util .Map ;
9+ import java .util .HashMap ;
10+ import javax .swing .JTable ;
11+ import javax .swing .table .*;
12+ import javax .swing .JCheckBox ;
13+ import javax .swing .JTextField ;
14+ import javax .swing .JComponent ;
15+ import java .awt .event .*;
16+ import javax .swing .event .*;
17+ import java .util .List ;
18+ import java .util .ArrayList ;
19+ import javax .swing .RowFilter ;
20+ import java .awt .Container ;
21+ import java .awt .BorderLayout ;
22+ import javax .swing .BoxLayout ;
23+ import java .awt .FlowLayout ;
24+ import javax .swing .JScrollPane ;
25+ public class TablePanel extends JPanel {
26+ private JPanel filters ;
27+ private JCheckBox sensitive [];
28+ private JTable table ;
29+ private JTextField queryFields [];
30+ private JTextField secondDateFields [];
31+ private List <RowFilter <Object ,Object >> sortList ;
32+ private List <RowFilter <Object ,Object >> sortDate ;
33+ private String formatIfDate ;
34+ public TablePanel (Object [][] rows , String columns []){
35+ table = new FTable (rows ,columns );
36+ table .getTableHeader ().setReorderingAllowed (false );
37+ sortList = new ArrayList <RowFilter <Object ,Object >>();
38+ sortDate = new ArrayList <RowFilter <Object ,Object >>();
39+ formatIfDate = "dd/MM/yyyy" ;
40+
41+ }
42+
43+ public TablePanel (JTable table ){
44+ formatIfDate = "dd/MM/yyyy" ;
45+
46+ this .table = table ;
47+ table .getTableHeader ().setReorderingAllowed (false );
48+ sortList = new ArrayList <RowFilter <Object ,Object >>();
49+ sortDate = new ArrayList <RowFilter <Object ,Object >>();
50+
51+ initUI ();
52+ }
53+
54+ public TablePanel (JTable table ,String format ){
55+ formatIfDate = format ;
56+
57+ this .table = table ;
58+ table .getTableHeader ().setReorderingAllowed (false );
59+ sortList = new ArrayList <RowFilter <Object ,Object >>();
60+ sortDate = new ArrayList <RowFilter <Object ,Object >>();
61+
62+ initUI ();
63+ }
64+
65+
66+ @ SuppressWarnings ("unchecked" )
67+ public void queryChanged (int index ){
68+ String text = queryFields [index ].getText ();
69+ if (table .getColumnClass (index ).equals (Date .class )){
70+ SimpleDateFormat dateFormat = new SimpleDateFormat (formatIfDate );
71+ String text2 = secondDateFields [index ].getText ();
72+
73+ if (text2 .equals ("" ) && !text .equals ("" )){
74+
75+ try {
76+ sortList .set (index ,RowFilter .dateFilter (RowFilter .ComparisonType .EQUAL ,dateFormat .parse (text ),index ));
77+ }catch (ParseException e ){
78+ System .out .println ("Error" );
79+ }
80+ }else if (text .equals ("" ) && !text2 .equals ("" )){
81+ try {
82+
83+ sortList .set (index ,RowFilter .dateFilter (RowFilter .ComparisonType .EQUAL ,dateFormat .parse (text2 ),index ));
84+
85+ }catch (ParseException e ){
86+
87+ System .out .println ("Error" );
88+ }
89+ }else if (text .equals ("" ) && text2 .equals ("" )){
90+
91+ sortList .set (index ,RowFilter .regexFilter (text ,index ));
92+
93+ }else {
94+ try {
95+
96+ sortDate = new ArrayList <RowFilter <Object ,Object >>();
97+
98+ sortDate .add (RowFilter .dateFilter (RowFilter .ComparisonType .AFTER ,dateFormat .parse (text ),index ));
99+ sortDate .add (RowFilter .dateFilter (RowFilter .ComparisonType .BEFORE ,dateFormat .parse (text2 ),index ));
100+ sortList .set (index ,RowFilter .andFilter (sortDate ));
101+
102+ }catch (ParseException e ){
103+
104+ System .out .println ("Error" );
105+ //sortList.set(index,RowFilter.regexFilter(text,index));
106+ }
107+ }
108+ //}
109+ }else {
110+
111+ if (sensitive [index ].isSelected ())
112+ sortList .set (index ,RowFilter .regexFilter (text ,index ));
113+ else
114+ sortList .set (index ,RowFilter .regexFilter ("(?i)" +text ,index ));
115+ }
116+ ((TableRowSorter <TableModel >)table .getRowSorter ()).setRowFilter (RowFilter .andFilter (sortList ));
117+ }
118+
119+
120+ public void initListeners (JComponent component ,int index ){
121+ if (component instanceof JTextField ){
122+ ((JTextField )component ).getDocument ().addDocumentListener (new DocumentListener (){
123+ final int i = index ;
124+ public void changedUpdate (DocumentEvent e ){
125+ queryChanged (i );
126+ }
127+ public void removeUpdate (DocumentEvent e ){
128+ queryChanged (i );
129+ }
130+ public void insertUpdate (DocumentEvent e ){
131+ queryChanged (i );
132+ }
133+
134+ });
135+ }else if (component instanceof JCheckBox ){
136+ ((JCheckBox )component ).addItemListener (new ItemListener (){
137+ final int i = index ;
138+ public void itemStateChanged (ItemEvent e ){
139+ //Trigger change on JTextField
140+ queryChanged (i );
141+ }
142+ });
143+ }
144+ }
145+
146+ public void initUI (){
147+ queryFields = new JTextField [table .getColumnCount ()];
148+ secondDateFields = new JTextField [table .getColumnCount ()];
149+ sensitive = new JCheckBox [table .getColumnCount ()];
150+ filters = new JPanel ();
151+ filters .setLayout (new BoxLayout (filters ,BoxLayout .X_AXIS ));
152+
153+ //filters = new JPanel(new BoxLayout(filters,BoxLayout.X_AXIS));
154+ for (int i = 0 ; i < table .getColumnCount ();i ++){
155+ queryFields [i ] = new JTextField ();
156+ //sensitive[i] = new JCheckBox();
157+ if (table .getColumnClass (i ).equals (Date .class )){
158+
159+ table .getColumnModel ().getColumn (i ).setCellRenderer (new AwesomeRender ());
160+ DateFormat dateFormat = new SimpleDateFormat ("dd/MM/yyyy" );
161+ secondDateFields [i ] = new JTextField ();
162+ initListeners (secondDateFields [i ],i );
163+ initListeners (queryFields [i ],i );
164+ initListeners (sensitive [i ],i );
165+ JPanel aux = new JPanel ();
166+ JPanel helper = new JPanel ();
167+ helper .setLayout (new BoxLayout (helper ,BoxLayout .Y_AXIS ));
168+ helper .add (queryFields [i ]);
169+ helper .add (secondDateFields [i ]);
170+ filters .add (helper );
171+
172+ try {
173+ sortDate .add (RowFilter .dateFilter (RowFilter .ComparisonType .EQUAL ,dateFormat .parse (queryFields [i ].getText ()),i ));
174+ sortDate .add (RowFilter .dateFilter (RowFilter .ComparisonType .EQUAL ,dateFormat .parse (secondDateFields [i ].getText ()),i ));
175+ //sortList.add(RowFilter.dateFilter(RowFilter.ComparisonType.EQUAL,dateFormat.parse(queryFields[i].getText()),i));
176+ sortList .add (RowFilter .andFilter (sortDate ));
177+ }catch (ParseException e ){
178+ System .out .println ("sem parse" );
179+
180+ sortList .add (RowFilter .regexFilter (queryFields [i ].getText (),i ));
181+ }
182+ }else {
183+ sensitive [i ] = new JCheckBox ();
184+ initListeners (queryFields [i ],i );
185+ initListeners (sensitive [i ],i );
186+ filters .add (sensitive [i ]);
187+ filters .add (queryFields [i ]);
188+
189+ sortList .add (RowFilter .regexFilter (queryFields [i ].getText (),i ));
190+ }
191+
192+ }
193+
194+ setLayout (new BorderLayout ());
195+ JScrollPane scrollpane = new JScrollPane (table );
196+ add (filters ,BorderLayout .NORTH );
197+ add (scrollpane ,BorderLayout .CENTER );
198+
199+ }
200+
201+
202+ private class AwesomeRender extends DefaultTableCellRenderer {
203+ SimpleDateFormat f = new SimpleDateFormat (formatIfDate );
204+
205+ public void setFormat (SimpleDateFormat f ){
206+ this .f = f ;
207+ }
208+ @ Override
209+ public Component getTableCellRendererComponent (JTable table ,
210+ Object value , boolean isSelected , boolean hasFocus ,
211+ int row , int column ) {
212+ if ( value instanceof Date ) {
213+ value = f .format (value );
214+ }
215+ return super .getTableCellRendererComponent (table , value , isSelected ,
216+ hasFocus , row , column );
217+ }
218+
219+ }
220+
221+
222+
223+ }
0 commit comments