季 靜 周志強(qiáng) 程 姝 王森龍
(安徽省標(biāo)準(zhǔn)化研究院 信息中心,安徽 合肥 230051)
Swing是Java應(yīng)用程序用戶(hù)界面開(kāi)發(fā)包,是一個(gè)用于開(kāi)發(fā)Java應(yīng)用程序用戶(hù)界面的開(kāi)發(fā)工具包。它以抽象窗口工具包(AWT)為基礎(chǔ)使跨平臺(tái)應(yīng)用程序可以使用任何可插拔的外觀風(fēng)格。Swing開(kāi)發(fā)人員只需要用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來(lái)創(chuàng)建優(yōu)雅的用戶(hù)界面[4-5]。
制作基礎(chǔ)水平軸線(xiàn)時(shí)關(guān)注的是,在畫(huà)出刻度時(shí),一定的寬度下,該圖表可以畫(huà)多少個(gè)刻度格。如圖1所示。
圖1 刻度格示意圖
該步驟總共分為六步:
(1)確定一個(gè)典型標(biāo)志格式的抽象寬度,如圖2所示。模式“mm/dd/yy”是經(jīng)典模型,因此本文使用它來(lái)計(jì)算標(biāo)尺刻度的寬度。
(2)確定最大計(jì)數(shù)的標(biāo)注將顯示在水平軸。
(3)設(shè)定變量hPoints以存儲(chǔ)臨時(shí)的標(biāo)尺刻度樣本。
(4)使間隔為6/12/3的整數(shù)倍,所以每一個(gè)標(biāo)尺刻度在水平軸顯示出來(lái)都是“整數(shù)”刻度。 (3:00,3:30,4:00…)如圖 3 所示。
(5)找到第一個(gè)明顯的“整數(shù)”索引(例如 刻度“03/11/2007 00:00”在日顯示模式下,“03:00”是小時(shí)視圖)如圖 4 所示。
(6)畫(huà)出每個(gè)步驟的標(biāo)記并且遍歷所有的標(biāo)記,如圖5所示。
圖2 確定抽象寬度
圖3 顯示整數(shù)刻度
圖4 尋找第一個(gè)整數(shù)索引
這里主要包含兩部分:在背景下“緩存”和設(shè)置全局“Cache”。
1.2.1 在背景下“緩存”
當(dāng)用戶(hù)放大數(shù)據(jù)圖表來(lái)查看詳細(xì)的數(shù)據(jù)時(shí),可以在新的時(shí)間范圍條件下過(guò)慮出舊的點(diǎn),并立刻刷新圖表來(lái)顯示,并不用從服務(wù)器加載數(shù)據(jù),因此,效果非常好。
(1)緩存舊的數(shù)據(jù);
(2)定義存儲(chǔ)來(lái)保存被過(guò)慮過(guò)的數(shù)據(jù);
(3)遍歷和過(guò)濾緩存的數(shù)據(jù);
(4)重置圖表的數(shù)據(jù)源;
(5)對(duì)圖表進(jìn)行刷新。
1.2.2 定義全局“Cache”
當(dāng)滾動(dòng)滑塊器的跨度的時(shí)候,由于所有的數(shù)據(jù)是歷史記錄,所以當(dāng)保持?jǐn)?shù)據(jù)的最長(zhǎng)時(shí)間期限時(shí),可以重復(fù)使用。
(1)定義一個(gè)參數(shù)記錄的最長(zhǎng)時(shí)間戳。
(2)緩存最大時(shí)間段的數(shù)據(jù)源并且記錄開(kāi)始和結(jié)束時(shí)間戳。
圖5 記錄開(kāi)始與結(jié)束的時(shí)間戳
(3)當(dāng)所選的時(shí)間在最大的范圍內(nèi)(滑塊面板上的突出的時(shí)間范圍),重新使用這些數(shù)據(jù)。
圖6 數(shù)據(jù)重用
滑塊將會(huì)以月為單位顯示出讓用戶(hù)可以查看和自由選擇的一個(gè)很大的范圍。在初始化時(shí),起點(diǎn)和終點(diǎn)(一段時(shí)間)已經(jīng)被指定,所以它將計(jì)算在這一時(shí)間段內(nèi)都包含哪些月份和這些月份里一共包含的天數(shù)。但是開(kāi)始的日期也許不是一個(gè)月的第一天,需要得到起始時(shí)間附近的第一天的日期(mm/1/yy)。如果得到水平軸上的第一個(gè)數(shù)值范圍的偏移,之后的事情就很容易了。如圖7所示。
圖7 滑塊及其窗格
(1)確定這個(gè)時(shí)間段的比率和滑塊的寬度;
(2)確定第一個(gè)月的標(biāo)記;
(3)確定第一個(gè)數(shù)值范圍的偏移量;
(4)確定每個(gè)月的每一步(天)。
此刻,通過(guò)指定的時(shí)間段的循環(huán)時(shí)間戳,可以得出滑塊及其尺度。
時(shí)延圖表在現(xiàn)實(shí)生活中應(yīng)用非常廣泛,以火車(chē)票訂票系統(tǒng)為例,火車(chē)票網(wǎng)上訂票系統(tǒng)提供火車(chē)票查詢(xún)、網(wǎng)上訂票、鐵路知識(shí)和新聞公告、貨運(yùn)信息查詢(xún)等等功能。其中最為便利的就是網(wǎng)上訂票,自助取票,讓自己的全程都有完整的計(jì)劃安排。
支撐訂票系統(tǒng)的一大功能就是時(shí)延圖表。眾所周知,大部分火車(chē)票是提前20天起售,也就是本月1號(hào)可以買(mǎi)20日的票,2號(hào)可以買(mǎi)21日的票以此類(lèi)推,正常情況下一直都是可點(diǎn)選自今日起,20日內(nèi)的車(chē)票,這就形成了一個(gè)動(dòng)態(tài)的延時(shí)圖表,如何保證系統(tǒng)能夠順延下面的日期,這就需要上述圖表的支持。當(dāng)特殊情況出現(xiàn)例如節(jié)假日前加車(chē)次,只需在后臺(tái)修改滑動(dòng)窗口的大小,就能輕松控制車(chē)票起售及截止時(shí)間,十分方便。
隨著計(jì)算機(jī)系統(tǒng)的普及,未來(lái)一定會(huì)有更多的便民系統(tǒng)應(yīng)用推出,為人們的生活提供便利。
[1]朱楊清.Excel2002幾個(gè)特殊圖表的制作及技巧[J].電腦學(xué)習(xí),2003(5):46-47.
[2]宋莉.Excel繪制3Y軸圖表的制作方法[J].大連民族學(xué)院學(xué)報(bào),2007(5):153.
[3]任斌.用Visio簡(jiǎn)化《電子技術(shù)》課件中圖表的制作[J].華北航天工業(yè)學(xué)院學(xué)報(bào),2006(16):85-86.
[4]蘇碧霞.探析JAVA Swing工具包在圖形用戶(hù)界面設(shè)計(jì)中的應(yīng)用[J].信息與電腦(理論版),2013(5):143-144.
[5]張海越,范曦.使用Java Swing組件進(jìn)行事件處理方法的分析與比較[J].軟件導(dǎo)刊,2013,12(6):26-27.