TITLE:RowFilterでJTableのページ分割

RowFilterでJTableのページ分割

編集者:Terai Atsuhiro
作成日:2007-11-05
更新日:2021-02-17 (水) 08:21:11

概要

JDK 6 で導入されたRowFilterを使って、JTableの行をPagination風に分割して表示します。

#screenshot

サンプルコード

void initLinkBox(Box box, TestModel m, final TableRowSorter<TestModel> sorter,

                final int size, final int step) {
 m.setRowCount(0);
 for(int i=0;i<size;i++) {
   m.addTest(new Test("Name"+i, (i%2==0)?"":"comment..."));
 }
 box.removeAll();
 final ButtonGroup bg = new ButtonGroup();
 box.add(Box.createHorizontalGlue());
 box.setBorder(BorderFactory.createEmptyBorder(0,0,5,0));
 int page = 0;
 for(int i=0;i<size;i+=step) {
   page++;
   final int index = i;
   final JRadioButton rb = new JRadioButton(""+page);
   final RowFilter<TestModel,Integer> filter = new RowFilter<TestModel,Integer>() {
     @Override
     public boolean include(Entry<? extends TestModel, ? extends Integer> entry) {
       int ei = entry.getIdentifier();
       return (index<=ei && ei<index+step);
     }
   };
   rb.setForeground(Color.BLUE);
   rb.setUI(ui);
   rb.setAction(new AbstractAction(""+page) {
     @Override
     public void actionPerformed(ActionEvent e) {
       sorter.setRowFilter(filter);
     }
   });
   box.add(rb);
   bg.add(rb);
   if(i==0) {
     rb.setSelected(true);
     sorter.setRowFilter(filter);
   }
 }

} }}

  • &jnlp;
  • &jar;
  • &zip;

解説

上記のサンプルは、検索サイトなどでよく使われている、PaginationをJTableで行っています。

ただし、ページ数が大量にある場合の処理や、前へ、次へなどの実装は無視して、ある位置から一定の行数だけ表示するフィルタを予め作成し、これを上部のJRadioButton*1で切り替えるだけになっています。

コメント