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

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

51Testing软件测试网.d'R8w3|S]| ~

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

5wU7i1Ru0

51Testing软件测试网 pzg'C oSYS

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

'~q#I!v$R!g0
1 TElementTable table = new TElementTable();51Testing软件测试网|*jB-PU
2 int[] pageSizes = { 100, 500, 1000 };51Testing软件测试网/Jd]x.Iz7d
3 TPageNavigator nav=new TPageNavigator(table.getTablePaging(), pageSizes)

  其中nav就是一个普通的JPanel,可以放在界面的任何位置。而table可以和nav在界面上完全脱离显示,如何布局都可以。51Testing软件测试网3kc} P)Q)H"\C[

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

!z:d6wY%~#f6L0

  如何做到这一点呢?只要用了TWaver Java这一“神器”,做到这一点就不难了。本文就通过一个例子,来说明如何定制一个翻页器,来拦截翻页动作,并从服务器获取翻页数据,进行动态显示。51Testing软件测试网(Q,}"MR#SH,x7o,SD

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

,R1i%w9c'`rk9` ht0

  而我们要做的,就是创建一个远程翻页的TablePaging,来代替这个默认实现即可。51Testing软件测试网+N8b _uKo4gsI

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

S0x8j`(S+@0 1 public interface TablePaging {51Testing软件测试网,x\ ER v
 2     public int getCurrentPageIndex();51Testing软件测试网 w;`;eNV g2\
 3     public void setCurrentPageIndex(int currentPageIndex);
J oxT kWv1g0 4     public int getPageRowSize();
!r7f.s2x^{6~0 5     public void setPageRowSize(int pageRowSize);51Testing软件测试网}m`9RX[5E
 6     public int getPageTotalCount();51Testing软件测试网O5\md7y2y$WB YF8L`D(Ps
 7     public int getTotalRowCount();51Testing软件测试网!Fci0JT F
 8     public void firstPage();
'}8?k,Fv9O$b4DZ0 9     public void previousPage();
J2\;P/K:Z|010     public void nextPage();51Testing软件测试网?^2a#av
11     public void lastPage();
[6gQK(jCE4kC012     public void update();51Testing软件测试网6\-HP@C(J%Is1l
13     public void addPageListener(PageListener pageListener);51Testing软件测试网2M0oX3O9L)p/J
14     public void removePageListener(PageListener pageListener);
*CLI5GU7mTb015 }
$@0ZLA1m1cc S1VU;rG0

i$b-]5m K2d"\xX0  以上函数基本上都可以顾名思义地理解,就不多作介绍了。我们现在假设后台有一个数据库,里面有一个客户地址的table。通过一个SQL查询服务,我们可以获得这些翻页数据。根据这个假设,我们可以做下面的实现:

(V+[_2fcw/e3B4k051Testing软件测试网s&d#zN[_Q

51Testing软件测试网,MY;w6q8\5A&@ p7R

  1 public class AddressTablePaging implements TablePaging {51Testing软件测试网~'{!zZ(_rg&B
  2     private SearchPane parent = null;
M3X7EV+U0  3     private List pageListeners = new ArrayList();
JWO#Js1u4a%E0  4     private TElementTable table = null;51Testing软件测试网7K)c8PB(`E%z[
  5     private int pageIndex = 1;51Testing软件测试网3Rd*J,K7s%c@
  6     private int pageSize = 100;
;Kb&}7N2s7Sm0  7 
"z4OC&{!]w0  8     public AddressTablePaging(TElementTable table, SearchPane parent) {
om/Yu \0  9         this.table = table;
7Xuix*P Z0 10         this.parent = parent;
8u? {O.KyzaA*L0 11     }
]7P/\h${w+S0`0 12 
,m)V/e2rC~T v%E0 13     private void loadPage() {
DR0rw"JP0 14         table.getDataBox().clear();51Testing软件测试网 `!q] Z:_
 15         try {51Testing软件测试网TK5wX xh2?k{
 16             int start = (pageIndex - 1) * pageSize;51Testing软件测试网0Vp0E'[Q J#?(v8c)j
 17             Collection<AddressVO> data = Server.searchAddress(..);
9D iA[Q+jPmF+T0 18             for (AddressVO vo : data) {
Y xVJ w4K0 19                 Node node = new Node();
^A H?x0 20                 node.setBusinessObject(vo);51Testing软件测试网,k]oZUvZ%Z
 21                 table.getDataBox().addElement(node);51Testing软件测试网 i @3?4EsH5VA(u,]
 22             }51Testing软件测试网0Av,W-Q$j-s
 23         } catch (Exception ex) {51Testing软件测试网 s?b5uF;jOe
 24             ex.printStackTrace();
mrs!I8|%M0 25             JOptionPane.showMessageDialog(table, ex.getMessage());
!{D Z ]'D._ f!Y2T|"x6L0 26         }
3s"~0] w8x0 27         firePageChanged();
*NG,s'X B~5S0 28     }51Testing软件测试网.c*[h!_V3Ve
 29 51Testing软件测试网S,NciU7r \U
 30     @Override51Testing软件测试网2pd`T(j
 31     public void firstPage() {51Testing软件测试网K)x^#E&qI
 32         pageIndex = 1;
W*]s.E:pC0 33         loadPage();
7n$[wX? f0 34     }
bzP`*xX3Mc0 35 51Testing软件测试网R,P4Kb`$n|6nw
 36     @Override
i)|4CB.H/@a0 37     public int getCurrentPageIndex() {51Testing软件测试网 ` M-XA,MXZ1f
 38         return this.pageIndex;51Testing软件测试网J ^I Dr5r~
 39     }51Testing软件测试网.qW]{R2J
 40 51Testing软件测试网CYz3\ b;Z
 41     @Override51Testing软件测试网u;PbrJ y
 42     public int getPageRowSize() {51Testing软件测试网dkgR7s;Q ~
 43         return this.pageSize;51Testing软件测试网:L;?P_ e{6|
 44     }
g,}Y4\oS0 45 51Testing软件测试网"d`{c:G$M
 46     @Override51Testing软件测试网om!A"J1Jp$vc(y+s
 47     public int getPageTotalCount() {
%K5xkO,G.]0 48         try {51Testing软件测试网0@p Vj5g1X)r
 49             int totalCount = getTotalRowCount();
t1uR&i-eR ~7N:n)Vx{U0 50             int pageCount = totalCount / getPageRowSize();
)O7j#G#G#?H+j0 51             if (totalCount % getPageRowSize() > 0) {
qK3p p ~5BiCB5\0 52                 pageCount++;51Testing软件测试网O7@c|a
 53             }
{ O&V \w }M6h'S0 54             return pageCount;51Testing软件测试网FDoS6n?)G}
 55         } catch (Exception ex) {51Testing软件测试网I:VTz0r!m
 56             ex.printStackTrace();51Testing软件测试网5J i wd0uQZ)Z-x
 57         }51Testing软件测试网4AkxK7sy!C1{
 58         return 0;
/F O)U6O [%n,t^0 59     }51Testing软件测试网KXEE*[/U4X!d
 60 
3Q%gt ]Gq0 61     @Override
P]J"tnlg0 62     public int getTotalRowCount() {51Testing软件测试网w;d(a"{3n1cH
 63         try {51Testing软件测试网*{0y!e_/YIB%q
 64             return Server.getAddressTotalCount(.);51Testing软件测试网8K9u;@)k ON-~%|
 65         } catch (Exception ex) {51Testing软件测试网O5C|1P AH
 66             ex.printStackTrace();
8aL^VT,Y"^0 67         }51Testing软件测试网I(d3M'eI,N [+S
 68         return 0;
pd2tHn D0 69     }
t s'Ro.ge6?x0w*d?0 70 
T'o`s_0 71     @Override51Testing软件测试网O0~E^+nYf
 72     public void lastPage() {51Testing软件测试网R V$v}%u
 73         this.pageIndex = getPageTotalCount();51Testing软件测试网{ D0t/[ZY }v0f}
 74         this.loadPage();51Testing软件测试网&@B7}.] j)ay
 75     }
o0g*i m'G XHj8z+Eb0 76 
FP7PG7Q%S(l$L0 77     @Override
#lO ]a6I7F/t+H8wC3e0 78     public void nextPage() {51Testing软件测试网%rr ?/|jM v@C$w
 79         this.pageIndex++;
#Y8m's#@'z$m.o0 80         this.loadPage();51Testing软件测试网/xQ1y?~-XxX
 81     }51Testing软件测试网"s_ f_\bBq/v|
 82 51Testing软件测试网;|5c%l1qXCm/r1b:g
 83     @Override
#C,z}7o]0 84     public void previousPage() {51Testing软件测试网z0f$m}ei__
 85         if (this.pageIndex > 1) {
ke Te:f#`6b x%_6O*B%\;]L0 86             pageIndex--;
-v2ViG~0 87         }51Testing软件测试网|Bw!k~
 88         this.loadPage();51Testing软件测试网)I$Ied2_&Kkjv
 89     }51Testing软件测试网|SO` I1\ Wv+V*k
 90 51Testing软件测试网$w w8t.m){Nr
 91     @Override51Testing软件测试网b b~:jE
 92     public void setCurrentPageIndex(int pageIndex) {51Testing软件测试网3eFQb7CT O;K
 93         this.pageIndex = pageIndex;51Testing软件测试网Y1prz t1?:^&T\W
 94     }
2iIKY e5Yn0 95 51Testing软件测试网 Lrd1l4a,BL5]2Gc)Z
 96     @Override51Testing软件测试网4NN%VR3i%AA
 97     public void setPageRowSize(int pageSize) {
P)GFH c Qc0 98         this.pageSize = pageSize;
M.\!K|-T X+\%I0 99     }
?;Bp3jlc0100 51Testing软件测试网9\-[ eHI
101     @Override51Testing软件测试网+P ~0K)h| ?9t:c/O
102     public void addPageListener(PageListener pageListener) {
5~9@2{V;XQ#u:HXQ*p4H0103         this.pageListeners.add(pageListener);51Testing软件测试网&W0gV&K\n
104     }
0x3{0f[f Htd@T0105 51Testing软件测试网Yb'? ~:T
106     @Override51Testing软件测试网r*f,V q%dK ~
107     public void removePageListener(PageListener pageListener) {51Testing软件测试网'W ~.gw-C
108         this.pageListeners.remove(pageListener);51Testing软件测试网"r!T.@*ntI
109     }51Testing软件测试网 [g#H{i x"a
110 
:ki#o,uD#p0111     public void firePageChanged() {
I,T;nH l0112         for (int i = 0; i < this.pageListeners.size(); i++) {51Testing软件测试网G6Hi3wZuTKk
113             PageListener pageListener = (PageListener) this.pageListeners.get(i);51Testing软件测试网ksF K0v0w/q
114             pageListener.pageChanged();
5m4JcHw+O0115         }
rS*O:xC,@Z}Y.F0116     }51Testing软件测试网2BFt`AW4j3g(Fo0Z
117 
uRN~2R"S0118     @Override51Testing软件测试网)chn9U6b
119     public void update() {
r.\:li$Z0120     }51Testing软件测试网 o|*~7U j
121 }

d|bU#k9` f$Q*D0

TAG:

 

评分:0

我来说两句

Open Toolbar