让Swing表格支持远程后台数据翻页-1

上一篇 / 下一篇  2012-08-13 10:30:20 / 个人分类:杂谈

TtMK1D&v3f0  TWaver Java不但提供了TTable、TElementTable这些表格组件,而且还提供了表格翻页器TPageNavigator。让表格和翻页器结合工作,可以立刻做出一个非常标准的可翻页的表格界面,如下图。

\.pM;@Cf*{0

51Testing软件测试网c w*n%G9X[

  要让这两个组件一起工作,直接这样new一个实例,并放在界面上就可以了:

$X4d*_ q}4`*b0
1 TElementTable table = new TElementTable();51Testing软件测试网#G,j&_ O)VJ{,HF-L
2 int[] pageSizes = { 100, 500, 1000 };
TR*`9Uio;bq03 TPageNavigator nav=new TPageNavigator(table.getTablePaging(), pageSizes)

  其中nav就是一个普通的JPanel,可以放在界面的任何位置。而table可以和nav在界面上完全脱离显示,如何布局都可以。51Testing软件测试网FOFTf

   不过,这个可以翻页的表格,只能翻页本地数据。也就是说,它只能翻已经放入TDataBox中的数据。例如我们一次性在TDataBox中加入了 10000条数据,可以通过这个翻页器进行“每页100条、共有100页”这样的翻页操作。但是大多时候,我们需要的并不是“本地翻页”,而是“远程翻 页”。所谓的远程翻页,也就是在每次翻页时候,TDataBox的数据需要被清空,并从远程服务器动态重新获取“下一页”的数据进行TDataBox加载 并且显示。

,qx `Uw)F/@G{k0

  如何做到这一点呢?只要用了TWaver Java这一“神器”,做到这一点就不难了。本文就通过一个例子,来说明如何定制一个翻页器,来拦截翻页动作,并从服务器获取翻页数据,进行动态显示。51Testing软件测试网 K&C Y d|(|]3~S

  TElementTable的翻页,实际上是靠一个TablePaging的接口来完成的。TWaver Java靠一个默认的TablePaging实现来完成了本地翻页。

S^m-q8kH6lB0

  而我们要做的,就是创建一个远程翻页的TablePaging,来代替这个默认实现即可。

9B|S3Y @P0

   TablePaging接口定义了下面这些函数。大多数的函数,都是在问你一些简单的远端数据方面的问题:一共有多少记录?一页有多少条记录?一共有多 少页?当前是第几页?并且在第一页、最后一页、上一页、下一页等操作发生时,回调这个接口。所以,我们只要有了后台数据,就不难回答这些问题。51Testing软件测试网E@ ` yH

 1 public interface TablePaging {51Testing软件测试网wg/~Is2v
 2     public int getCurrentPageIndex();
#jK~a y*F'iH0 3     public void setCurrentPageIndex(int currentPageIndex);
P&`-`Z3J$mu|0 4     public int getPageRowSize();51Testing软件测试网%NE v1u/D r
 5     public void setPageRowSize(int pageRowSize);
V7\BJ^m#e0 6     public int getPageTotalCount();51Testing软件测试网E&Y-]Ta C Y#Z
 7     public int getTotalRowCount();
Mo |'T [:h^h7|0 8     public void firstPage();
g8F_f)Q)L g Q N0 9     public void previousPage();51Testing软件测试网U Y6W J{'Sg
10     public void nextPage();
HBE!|U$QO/c;{9T011     public void lastPage();51Testing软件测试网$];R`mCA
12     public void update();51Testing软件测试网*eJ5c!M&@`?
13     public void addPageListener(PageListener pageListener);51Testing软件测试网3H7ld3G jq5i
14     public void removePageListener(PageListener pageListener);
P _._1wR9a015 }
ocO;bB?oRd0
51Testing软件测试网fk{$Ox]%ox9J

  以上函数基本上都可以顾名思义地理解,就不多作介绍了。我们现在假设后台有一个数据库,里面有一个客户地址的table。通过一个SQL查询服务,我们可以获得这些翻页数据。根据这个假设,我们可以做下面的实现:51Testing软件测试网W"i J:G@-ec

w;\6z!Ki eUm$D,|051Testing软件测试网3h"O9k Wf8L'u

  1 public class AddressTablePaging implements TablePaging {
{&lQ9?Br0  2     private SearchPane parent = null;
Z*_we6| iU4wGi+S+e0  3     private List pageListeners = new ArrayList();
.t:Z:a`H#V#d0  4     private TElementTable table = null;51Testing软件测试网&eRC6P)y+@
  5     private int pageIndex = 1;51Testing软件测试网#B*@.N"Amy|
  6     private int pageSize = 100;51Testing软件测试网 rTE`N
  7 
rC"GC;a?0  8     public AddressTablePaging(TElementTable table, SearchPane parent) {
*m yJkn,b%bh0  9         this.table = table;51Testing软件测试网r q&Am2W0?nv
 10         this.parent = parent;
9f@5N?4Yr0 11     }51Testing软件测试网X"rP&A%P6L*ou
 12 
)Cq&vT~ ^0 13     private void loadPage() {
2HU~Q%n[rY#g0 14         table.getDataBox().clear();51Testing软件测试网\"T w0r2okS
 15         try {51Testing软件测试网7["R&na ~${E0q
 16             int start = (pageIndex - 1) * pageSize;
VK/sk{2Ii9Sg0 17             Collection<AddressVO> data = Server.searchAddress(..);51Testing软件测试网{oDGIb7n w,WmR
 18             for (AddressVO vo : data) {
!@,ks.A:} E0 19                 Node node = new Node();
,K2U1d3[iWk(H0 20                 node.setBusinessObject(vo);
0l;j:j(n%S'g x?l0 21                 table.getDataBox().addElement(node);
A+D2IvLeq5G!I3] G+A0 22             }51Testing软件测试网 W4cC mS&`
 23         } catch (Exception ex) {
kky{$^"ZfQ3c_0 24             ex.printStackTrace();
5Vxl9F-~ e%z mzF0 25             JOptionPane.showMessageDialog(table, ex.getMessage());51Testing软件测试网1JkPEY_F#S
 26         }
;O4K b3iAl"P&T#z0 27         firePageChanged();51Testing软件测试网 f/])p@6Cy2Q(t
 28     }51Testing软件测试网A,WC} [e7Q
 29 51Testing软件测试网z JM5f*y%j\!]
 30     @Override51Testing软件测试网WZ)F9eQq
 31     public void firstPage() {51Testing软件测试网/@M1e3n Lu%m T~
 32         pageIndex = 1;
y:R8d7Bs0 33         loadPage();51Testing软件测试网,OR8YlDv{
 34     }
:X1}/_6F9{/F9_0 35 51Testing软件测试网^I_D wh4Mm`
 36     @Override51Testing软件测试网*j,c?7Lg.vv
 37     public int getCurrentPageIndex() {51Testing软件测试网cgH7w3F2i
 38         return this.pageIndex;
y&u}T q w;T0 39     }51Testing软件测试网)gsL4U_P
 40 
rs8s:\f1Rg0 41     @Override
pu3M#_l!Xd0 42     public int getPageRowSize() {51Testing软件测试网| yu|7va
 43         return this.pageSize;51Testing软件测试网6if|)nla9iv
 44     }
7Z/?(nD'lE;r#q$YS0 45 
?-qJMb2Nr0 46     @Override
U7~&w,naB&b-hf B0 47     public int getPageTotalCount() {
1M$v `.V.j;d.cZ0 48         try {51Testing软件测试网QT8jT DJ O*X
 49             int totalCount = getTotalRowCount();51Testing软件测试网2Cm"E&o8t/t
 50             int pageCount = totalCount / getPageRowSize();
?w8\/ouMF k0 51             if (totalCount % getPageRowSize() > 0) {
qoo'Q"O&|0 52                 pageCount++;51Testing软件测试网S~j ^0z!p DKk
 53             }51Testing软件测试网,z"|"UD p]6mH
 54             return pageCount;
Rf2b!WS0 55         } catch (Exception ex) {
G9O/M` \V0 56             ex.printStackTrace();
(Z'X3oJ;E"Y:W(k0 57         }
}5_ ~6KM hK X6H0 58         return 0;
9_9gz.]*d-`0 59     }51Testing软件测试网'J9_;w6X;f? |f ?
 60 
?)u7@PVD5Op0 61     @Override51Testing软件测试网5nS&u-Ef$Q
 62     public int getTotalRowCount() {51Testing软件测试网N k$~]e/^.Y e$f1o
 63         try {51Testing软件测试网6\S[t[$?
 64             return Server.getAddressTotalCount(.);
_2DG%}$\%J&c0 65         } catch (Exception ex) {
.BnWC['}0 66             ex.printStackTrace();
8i@9s f%JB#c0 67         }
g1X[q C \d0 68         return 0;
&a w(m$bksy0 69     }51Testing软件测试网9Wm1?@4p'|@
 70 51Testing软件测试网1~\9h.zqt!s K
 71     @Override
([ ?(gd^N3O|5@p0 72     public void lastPage() {
@u6R9H)C ` y0 73         this.pageIndex = getPageTotalCount();
;{0Lt)_*a5R2Q ^;P0 74         this.loadPage();51Testing软件测试网&pr5Vg8J6GZ
 75     }
}#fj3r J \vZX9y0 76 
Zn-N2?W6K1n0 77     @Override
-E)H Xjm'y"`0 78     public void nextPage() {
x2i o%?)yDQ0 79         this.pageIndex++;
hq1n(L M0 80         this.loadPage();
\l9x3F3L"Cw0 81     }51Testing软件测试网}S&RZ"U$I1J
 82 51Testing软件测试网aW4{4Yy2s#p
 83     @Override
+e X%]sjM_[7y0B0 84     public void previousPage() {
K/~*Ce Lp(Q$b0 85         if (this.pageIndex > 1) {51Testing软件测试网m*F bU0w6Z2T*iM.A
 86             pageIndex--;
6`}#F+k"R8N3^a0 87         }51Testing软件测试网D2]I E6n&\
 88         this.loadPage();51Testing软件测试网b,w"f%dUP9I
 89     }51Testing软件测试网"{&? O:vM0S ?
 90 
h4y4Z g5G l/o0 91     @Override51Testing软件测试网/x.{]0^c dtZC
 92     public void setCurrentPageIndex(int pageIndex) {51Testing软件测试网7ETg&I G O KO!}$J
 93         this.pageIndex = pageIndex;
%i,y4yk;J[%v0 94     }51Testing软件测试网*VC{,C$k:?P?z"w {8J
 95 51Testing软件测试网My/y Y+l.N'z1}
 96     @Override
+A9zK-}h ^ G0 97     public void setPageRowSize(int pageSize) {51Testing软件测试网+B;P\Ty dT h
 98         this.pageSize = pageSize;51Testing软件测试网?Lf)v6u&_u B0a/B z0]
 99     }
K:j(|9R-w5M8q P_{0100 
J:Pm jX/l g,b0101     @Override51Testing软件测试网:a?9SC*Z e
102     public void addPageListener(PageListener pageListener) {
C2N:voEY0103         this.pageListeners.add(pageListener);
5p?"BHW S0104     }51Testing软件测试网 vGMIR-n
105 
5K"j'L8J0Oz0106     @Override
c*K MH `?P%JC)F0107     public void removePageListener(PageListener pageListener) {51Testing软件测试网fj0s5l!k'gO,U LmI
108         this.pageListeners.remove(pageListener);
B'U$\FN9KG0109     }
&JBWj`?R.q0110 51Testing软件测试网^ QO)[&C-i x
111     public void firePageChanged() {51Testing软件测试网hDN!Bx"WL
112         for (int i = 0; i < this.pageListeners.size(); i++) {
$Hz+}(z V'X0113             PageListener pageListener = (PageListener) this.pageListeners.get(i);
OK~Q4J)R+L0114             pageListener.pageChanged();
N,T9y,ls ^(gw0115         }
O [;}1TRzo?0116     }
2s;n8_Hm%\0117 51Testing软件测试网a%N O#Rbf,b
118     @Override51Testing软件测试网"bL%l\U;Dn]
119     public void update() {51Testing软件测试网 \RR)Z1o
120     }
M7F+{5Y pm-C"fe0121 }

u2\"p\9|&A0

TAG:

 

评分:0

我来说两句

Open Toolbar