Vienkāršākais veids, kā to izdarīt, ir jūsu galda modelim ieviest dekoratora/filtra modeli.
Dekorators ieviesīs TableModel, bet pielāgo parametrus, kas tiek nodoti getValueAt(row,col), pamatojoties uz to, kuras rindas vēlaties paslēpt.
Piemēram
publiskā klase RowFilterModel ievieš TableModel { ... privātā Būla [] isRowHidden; privātais int numVisibleRows; public RowFilterModel(TableModel realModel) { this.realModel = realModel; numVisibleRows = realModel.getRowCount(); isRowHidden = jauns Būla [numVisibleRows]; } public int getRowCount() { return numVissibleRows; } public int getColumnCount() { return realModel.getColumnCount(); } public void setRowVissible(int rinda, Būla stāvoklis) { isRowHidden[rinda] = !state; if (stāvoklis) numVisibleRows++; else numVisibleRows--; } public Object getValueAt(int row, int col) { // atgriež rindu, kas nav slēpta // iespējams, ir efektīvāki veidi, kā to izdarīt... for(int realRow=0; true; realRow++) { if (! isRowHidden[realRow]) { if (rinda==0) { return realModel.getValueAt(count,col); } rinda —; } } } }
Acīmredzot, lai tas darbotos, ir jādara vairāk (un iepriekš minētajā kodā var būt dažas problēmas), taču tam vajadzētu sniegt pamatideju. Jo īpaši jums ir jāiestata notikumu apstrāde iepriekšminētajam tabulas modelim, lai pareizi ziņotu, kad realTable mainās. Jums būs arī jāuzrauga izmaiņas reālajā modelī, pielāgojiet slēpto rindu masīvu, ja mainās reālā tabula.
Pēc tam to varētu izmantot šādi:
JTabula t = ...; RowFilterModel filtrs = new RowFilterModel(t.getModel()); t.setModel(filtrs); ... filter.setRowVisible(42, true);
Ņemiet vērā, ka es apvērsu loģiku iekšpusē, lai izmantotu “isRowHidden” — tas izmanto faktu, ka, veidojot masīvu, tā vērtības būs nepatiesas, tāpēc pēc noklusējuma visas rindas ir redzamas. Ja mēs to būtu nosaukuši par “isRowVisible”, mums būtu bijis jāiet cauri un jāiestata visi masīva elementi uz patiesu.
Iesaku izlasīt manu rakstu “Advanced Model-View-Controller Techniques” IBM VisualAge izstrādātāju domēnā, lai iegūtu plašāku informāciju par šeit izmantoto modeļu filtrēšanas koncepciju. Skatiet vietni http://www7.software.ibm.com/vad.nsf/Data/Document2329.







