首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

EMF 介紹系列(五):定制應用程式介面——從精簡嚮導到資源管理器風格編輯器

     編輯:Java 相關知識

定制策略:優先修改模型屬性,次之修改代碼

EMF 生成的預設應用程式外觀雷同,需透過定制滿足實際需求。定制途徑:

  1. 修改 ecore/genmodel 模型屬性(最直觀、易維護)。
  2. 直接修改生成代碼(靈活度高,但需維護 @generated 標記)。

案例一:精簡模型建立嚮導

預設嚮導兩步驟:輸入檔名 → 選擇根物件與編碼。商店範例根物件固定為 Shop,第二步可省略。

修改 ShopModelWizard:

  • addPages():註解掉 initialObjectCreationPage 相關代碼。
  • createInitialModel():直接回傳 shopFactory.createShop()。
  • performFinish():固定編碼為 UTF-8。

修改後,使用者僅需輸入檔名即可完成建立。

案例二:隱藏大綱視圖頂層 Resource 節點

預設大綱顯示完整 ResourceSet 樹,頂層為 platform:/resource/...shop 無實際意義。需讓大綱直接顯示 Shop 物件。

修改 ShopEditor.getContentOutlinePage():

contentOutlineViewer.setInput(
    editingDomain.getResourceSet().getResources().get(0)
);

將 Viewer 輸入從 ResourceSet 改為第一個 Resource,大綱即以 Shop 為根節點。

案例三:打造資源管理器風格編輯器

預設編輯器含六個 Tab,實務上常僅需大綱 + 表格。修改 createPages() 保留 Table 頁,其餘註解。

擴充表格欄位:

TableColumn objectColumn = new TableColumn(table, SWT.NONE);
objectColumn.setText("Name");
TableColumn childrenColumn = new TableColumn(table, SWT.NONE);
childrenColumn.setText("Children");
TableColumn descColumn = new TableColumn(table, SWT.NONE);
descColumn.setText("Description");

實作 ITableItemLabelProvider 顯示差異化資料:

public class CategoryItemProvider extends ItemProviderAdapter 
    implements ..., ITableItemLabelProvider {

    public String getColumnText(Object object, int columnIndex) {
        Category category = (Category) object;
        switch (columnIndex) {
            case 0: return category.getName();
            case 1: return String.valueOf(category.getChildren().size());
            case 2: return ""; // Category 無描述
            default: return "";
        }
    }
    // getColumnImage 回傳 null
}

註冊新介面至 AdapterFactory:

supportedTypes.add(ITableItemLabelProvider.class);

修改 ShopItemProviderAdapterFactory 建構子,加入上述行,使表格能正確委派顯示邏輯。

成果

經過定制,應用程式擁有精簡嚮導、乾淨大綱、資源管理器風格的雙欄編輯器,大幅提升使用者體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved