让Swing表格支持远程后台数据翻页-1
上一篇 / 下一篇 2012-08-13 10:30:20 / 个人分类:杂谈
TtMK1D&v3f0 TWaver Java不但提供了TTable、TElementTable这些表格组件,而且还提供了表格翻页器TPageNavigator。让表格和翻页器结合工作,可以立刻做出一个非常标准的可翻页的表格界面,如下图。
\.pM;@Cf*{0要让这两个组件一起工作,直接这样new一个实例,并放在界面上就可以了:
$X4d*_ q}4`*b01 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-q8kH6l B0而我们要做的,就是创建一个远程翻页的TablePaging,来代替这个默认实现即可。
9B|S3Y @P0TablePaging接口定义了下面这些函数。大多数的函数,都是在问你一些简单的远端数据方面的问题:一共有多少记录?一页有多少条记录?一共有多 少页?当前是第几页?并且在第一页、最后一页、上一页、下一页等操作发生时,回调这个接口。所以,我们只要有了后台数据,就不难回答这些问题。51Testing软件测试网 E@ ` yH
1 public interface TablePaging {51Testing软件测试网wg/~Is2v2 public int getCurrentPageIndex();
#jK~a y*F'iH0 3 public void setCurrentPageIndex(int currentPageIndex);
P&`-`Z3J$mu |0 4 public int getPageRowSize();51Testing软件测试网%NEv1u/Dr
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 gQN0 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软件测试网3H7ld3Gjq5i
14 public void removePageListener(PageListener pageListener);
P_._1wR9a015 }
ocO;bB?oRd051Testing软件测试网fk{$Ox]%o x9J
以上函数基本上都可以顾名思义地理解,就不多作介绍了。我们现在假设后台有一个数据库,里面有一个客户地址的table。通过一个SQL查询服务,我们可以获得这些翻页数据。根据这个假设,我们可以做下面的实现:51Testing软件测试网W"i J:G @-ec
w;\6z!Ki eUm$D,|051Testing软件测试网3h"O9kWf8L'u
1 public class AddressTablePaging implements TablePaging { {&lQ9?Br0 2 private SearchPane parent = null; Z*_we6| i U4wGi+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) { *myJkn,b%bh0 9 this.table = table;51Testing软件测试网rq&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软件测试网\"Tw0r2okS 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'gx?l0 21 table.getDataBox().addElement(node); A+D2IvLeq5G!I3] G+A0 22 }51Testing软件测试网W4cCmS&` 23 } catch (Exception ex) { kky{$^"ZfQ3c_0 24 ex.printStackTrace(); 5Vxl9F-~ e%z m zF0 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软件测试网zJM5f*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 w h4Mm` 36 @Override51Testing软件测试网*j,c?7Lg.vv 37 public int getCurrentPageIndex() {51Testing软件测试网cgH7w3F2i 38 return this.pageIndex; y&u}Tqw;T0 39 }51Testing软件测试网)gsL4U_P 40 rs8s:\f1R g0 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-hfB0 47 public int getPageTotalCount() { 1M$v `.V.j;d.c Z0 48 try {51Testing软件测试网QT8jT DJ O*X 49 int totalCount = getTotalRowCount();51Testing软件测试网2Cm"E&o8t/t 50 int pageCount = totalCount / getPageRowSize(); ?w8\/ouMFk0 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软件测试网Nk$~]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; &aw(m$bksy0 69 }51Testing软件测试网9Wm1?@4p'|@ 70 51Testing软件测试网1~\9h.zqt!s K 71 @Override ([?(gd^N3O|5@p0 72 public void lastPage() { |