Swing組件的新元素Spinner Model
Swing組件的新元素Spinner Model
Java 2 SDK,1.4 beta 的最新發(fā)行版向 JFC/Swing組件集添加了兩個(gè)強(qiáng)大的新組件。其中一個(gè)是 JSpinner ,它使用戶(hù)能夠方便地選擇日期、數(shù)字或拾取列表中的選項(xiàng)。(另一個(gè)是 JFormattedTextField ,用于支持格式化的輸入。)
開(kāi)始啟動(dòng)
JSpinner 使您可創(chuàng)建一個(gè)排序的值列表,該表在選擇框中每次顯示一個(gè)選項(xiàng)。用戶(hù)通過(guò)點(diǎn)擊上移和下移箭頭進(jìn)行選擇。
用戶(hù)使用組件或鍵盤(pán)上的上移和下移箭頭進(jìn)行選擇。他們也可輸入自己的選擇。然而,與 JComboBox 不同, JSpinner 不提供下拉列表選擇,所以各個(gè)選擇以及它們的順序應(yīng)有一定的意義。
要使用類(lèi),可簡(jiǎn)單地創(chuàng)建一個(gè)供選擇的元素集合(在 List 或數(shù)組中),從列表中創(chuàng)建一個(gè) Spinner Model ,并為模型創(chuàng)建一個(gè) JSpinner :
根據(jù)您所用的輸入類(lèi)型,有以下幾個(gè)可用于創(chuàng)建Swing組件數(shù)據(jù)模型的幫助類(lèi):
◆SpinnerDateModel :用于接受日期輸入。該類(lèi)支持通過(guò)將 Calendar 類(lèi)中的常數(shù)設(shè)置為不同的值來(lái)更改日期;例如, Calendar.WEEK_OF_MONTH 每次將日期更改一周。
◆SpinnerListModel :用于接受來(lái)自值列表的輸入。
◆SpinnerNumberModel :用于接受已設(shè)定好步長(zhǎng)的一定范圍內(nèi)的數(shù)字( int 或 double )的輸入。
每個(gè) Spinner Model 執(zhí)行取決于用于輸入值的編輯器。此編輯器必須是一個(gè) JComponent ;系統(tǒng)定義的編輯器子類(lèi) JSpinner.DefaultEditor 。其中一個(gè)可用于每個(gè)模型:
◆JSpinner.DateEditor :用于 SpinnerDateModel 。允許您定制輸入日期格式。
◆JSpinner.ListEditor :用于 SpinnerListModel 。支持 type-ahead 來(lái)對(duì)值進(jìn)行定位。
◆JSpinner.NumberEditor :用于 SpinnerNumberModel 。允許您定制十進(jìn)制格式的模式。
所有這些類(lèi)(及更多類(lèi))之間的關(guān)系如圖1所示。
JSpinner UML 關(guān)系示意圖
JSpinner 組件象其它 Swing組件一樣工作。如果您有興趣查出用戶(hù)更改選擇的時(shí)間,請(qǐng)連一個(gè)偵聽(tīng)器。對(duì)于 JSpinner ,偵聽(tīng)器是一個(gè) ChangeListener ,您可直接將其連到 JSpinner 或其 Spinner Model 上。雖然您可將偵聽(tīng)器連到兩者中的任意一個(gè),當(dāng)值發(fā)生更改時(shí), ChangeEvent 的源總是 Spinner Model :
清單1. JSpinner 事件偵聽(tīng)
- ChangeListener listener = new ChangeListener() {
- public void stateChanged(ChangeEvent e) {
- SpinnerModel source = (SpinnerModel)e.getSource();
- System.out.println("The value is: " + source.getValue());
- }
- };
- model.addChangeListener(listener);
【編輯推薦】