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