Чӣ тавр ман метавонам сатрро дар JTable пинҳон кунам (нест кунам)?

0
10697

Роҳи осонтарини ин кор ин татбиқи модели ороишгар/филтр барои модели мизи шумост.

Декоратор TableModel-ро амалӣ мегардонад, аммо параметрҳои ба getValueAt(сатр, col) додашударо дар асоси кадом сатрҳо пинҳон кардан мехоҳед, тағир диҳед.

Барои намуна


синфи ҷамъиятӣ RowFilterModel TableModel -ро амалӣ мекунад { ... хусусии мантиқии [] isRowHidden; хусусӣ int numVisibleRows; оммавии RowFilterModel(TableModel realModel) { this.realModel = realModel; numVisibleRows = realModel.getRowCount(); isRowHidden = нави логикӣ[numVisibleRows]; } public int getRowCount() { баргардонидани numVisibleRows; } public int getColumnCount() { баргардонидани realModel.getColumnCount(); } public void setRowVisible(int сатр, ҳолати логикӣ) { isRowHidden[сатр] = !state; агар (ҳолат) numVisibleRows++; else numVisibleRows--; } public Object getValueAt(int row, int col) { // баргардонидани сатри ғайрипинхонӣ // эҳтимолан роҳҳои муассиртари ин кор вуҷуд доранд... for(int realRow=0; true; realRow++) { агар (! isRowHidden[realRow]) { агар (сатр==0) { баргардонидани realModel.getValueAt(шумур,кол); } сатр--; } } } }

Аён аст, ки барои иҷрои ин кор корҳои зиёдеро бояд анҷом дод (ва коди дар боло зикршуда метавонад якчанд мушкилот дошта бошад), аммо ин бояд идеяи асосиро диҳад. Аз ҷумла, шумо бояд коркарди рӯйдодҳоро барои модели ҷадвали дар боло зикршуда насб кунед, то ҳангоми тағир додани ҷадвали воқеӣ дуруст гузориш диҳад. Шумо инчунин бояд тағиротро дар модели воқеӣ мушоҳида кунед, агар ҷадвали воқеӣ тағир ёбад, массиви сатри пинҳоншударо танзим кунад.

Пас шумо метавонед инро ба таври зерин истифода баред:


Ҷадвали JҶадвали t = ...; Филтри RowFilterModel = RowFilterModel нав(t.getModel()); t.setModel (филтр); ... filter.setRowVisible(42, ҳақиқӣ);

Аҳамият диҳед, ки ман мантиқи дохилиро барои истифодаи "isRowHidden" баръакс кардам - ​​ин аз он бартарият медиҳад, ки вақте ки мо массивро эҷод мекунем, арзишҳои он бардурӯғ хоҳанд буд, аз ин рӯ бо нобаёнӣ, ҳама сатрҳо намоён мешаванд. Агар мо онро "isRowVisible" меномидем, ба мо лозим меомад, ки аз байн равем ва ҳамаи унсурҳои массивро ба ҳақиқӣ гузорем.

Ман ба шумо тавсия медиҳам, ки мақолаи маро "Усулҳои пешрафтаи модел-намоиш-назораткунанда"-ро дар Domain Developer VisualAge IBM хонед, то маълумоти бештар дар бораи консепсияи филтри модели дар ин ҷо истифодашавандаро хонед. Ба http://www7.software.ibm.com/vad.nsf/Data/Document2329 нигаред.