2009年4月8日 星期三

U17 第三個元件(1)──基本Data Model編輯器的頁面

當只存在一種Data Model時,就有機會為之定義通用編輯器提供給使用者快速編輯內容。編輯的方式有兩大類:一種是根據資料屬性的範圍修改各自的值,另一種是除了修改屬性值之外還允許增減不同名稱的屬性。前者以PropertiesDataModel的設定特性而後者是以BeanDataModel的屬性特性作為設計基礎;PropertiesDataModel可以視為不能變動屬性的BeanDataModel,定義設定檔時一定要使用bean file的方式才能兼顧未來的擴充性。

最底層的設計是將一個可定義的屬性對應到一個UI Bean,利用comment來標示這個UI Bean的實際類別與描述屬性;UI類別名稱會依序生成,同時呼叫描述屬性的對應方法(有些屬性需要加工處理,像是Jcombo的選單內容字串)。基本的定義屬性有:提示文字、生成類別、enable、visible與選單內容字串。提示文字與編輯欄位的tooltip都會顯示屬性原本的名稱。

欄位向上的集合是頁面,對應的節點是bean;允許定義的屬性是提示文字、生成類別與欄位寬度。頁面的寬度減去欄位寬度就是提示文字的寬度。再向上就是根節點beans,允許定義的屬性是提示文字、background、foreground、font、width與height。加上單頁式的編輯註解後,設定檔案的內容會像是下面的樣子,附圖是執行時的範例。

<!-- frame's name.
  class=javax.swing.JFrame,background=0x0000ff,foreground=0xffff00,
  font=monospaced-plain-16,width=400,height=300 -->
<beans>
  <!—Page 0.
    class=javax.swing.JPanel,fieldwidth=200-->
  <bean id="FieldModel">
    <!-- This is field1 prompt.
      class=javax.swing.JTextField,enable=true,visible=true -->
    <property name="field1" value="default1" />
    <!-- This is field2 prompt.
      class=javax.swing.JCheckBox,enable=true,visible=true -->
    <property name="field2" value="true" />
    <!-- This is field3 prompt.
      class=javax.swing.JComboBox,enable=true,visible=true,items=|1|2|3 -->
    <property name="field3" value="" />
    <!-- .
      class=javax.swing.JComboBox,enable=false,visible=true,items=|1|2|3 -->
    <property name="field4" value="2" />
  </bean>
</beans>


編輯欄位除了字串的設定外,還應該為list、map與listmap準備另外用對話盒放置的集合編輯器才算擁有完整的編輯功能。

註:這裡的內容並未實作在workspace裡,但是在之前的專案裡已驗證過可行。

沒有留言:

張貼留言