让Swing表格支持远程后台数据翻页-1
上一篇 / 下一篇 2012-08-13 10:30:20 / 个人分类:杂谈
TWaver Java不但提供了TTable、TElementTable这些表格组件,而且还提供了表格翻页器TPageNavigator。让表格和翻页器结合工作,可以立刻做出一个非常标准的可翻页的表格界面,如下图。
5wU7i1Ru0要让这两个组件一起工作,直接这样new一个实例,并放在界面上就可以了:
'~q#I!v$R!g01 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软件测试网3k c} 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\ERv2 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软件测试网!Fci0J T 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(jC E4kC012 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 }
$@0ZLA1m1ccS1V U;rG0
i$b-]5m K2d"\xX0 以上函数基本上都可以顾名思义地理解,就不多作介绍了。我们现在假设后台有一个数据库,里面有一个客户地址的table。通过一个SQL查询服务,我们可以获得这些翻页数据。根据这个假设,我们可以做下面的实现:
(V+[_2fcw/e3B4k051Testing软件测试网s&d#zN[_Q51Testing软件测试网,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)c8P B(`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~Tv%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'XB~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`*xX3M c0 35 51Testing软件测试网R,P4K b`$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;PbrJy 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@pVj5g1X)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 iwd0uQZ)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; pd2tHnD0 69 } ts'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*im'GXHj8z+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) { keTe: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软件测试网Y1przt1?:^&T\W 94 } 2iIKY e5Yn0 95 51Testing软件测试网Lrd1l4a,BL5]2Gc)Z 96 @Override51Testing软件测试网4NN%VR3i%AA 97 public void setPageRowSize(int pageSize) { P)GFHc Qc0 98 this.pageSize = pageSize; M.\!K|-T X+\%I0 99 } |