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

eJFace 開發嵌入式應用程式完整指南

     編輯:Java 相關知識

前言:移動裝置應用開發的新機遇

隨著移動裝置普及,嵌入式應用程式需求將持續增長。現在正是掌握 eJFace(Embedded JFace)的最佳時機——這是一套開放標準的嵌入式 JFace 函式庫,屬於嵌入式豐富客戶端平台(eRCP)的核心組件,為開發人員提供在嵌入式環境中構建使用者介面(UI)的強大工具。

eJFace 核心優勢

eJFace 封裝了多個函式庫,讓開發人員無需進行複雜的 eSWT 程式設計即可構建應用。它提供強大的 API 並引入 Model-View-Controller (MVC) 架構,大幅簡化嵌入式應用的實作與維護。本文將詳細說明如何使用 eJFace 開發應用程式,並對比 eJFace 與桌面版 JFace 的差異,幫助熟悉 JFace 的開發者快速上手。

您將學到的內容

  • eJFace 函式庫結構、API 及其使用方法
  • JFace 與 eJFace 之間的關鍵差異
  • 在 eRCP 環境下開發 eJFace、eSWT 和 eWorkbench 應用程式
  • 如何為應用程式添加 eJFace 功能

eJFace 核心概念解析

1. 什麼是 eJFace?

eJFace 專為手持裝置設計,是桌面版 JFace 函式庫的純子集。它擴展 eSWT 並與之互操作,提供不依賴平台的使用者介面 API。eJFace 整合了部分 eSWT 元件(如基於 MVC 的查看器),可減少開發與維護工作量;同時移除了 JFace 中體積龐大、在手持裝置上無優勢的部分。

2. eJFace 的用途

  • 為嵌入式裝置提供高階 UI 功能
  • 建立與 eWorkbench 整合的 eRCP 應用程式
  • 提供擴展 eSWT 的類別,使 eRCP 應用能與工作台整合並提供更複雜的元件(如面向 MVC 的查看器)

3. eJFace 特性

  • eSWT 與 eJFace 的關係,如同 SWT 與 JFace
  • 依賴 eSWT Core/Expanded 部分及 J2ME CDC 配置檔
  • 在查看器中將 eSWT 元件封裝於 MVC 範式中,隱藏實作細節、減少程式碼行數
  • 建構於 eSWT 之上,無需額外原生函式庫即可運行
  • 提供資源處理類別,實現高效記憶體管理與效能提升

eJFace 套件架構詳解

表 1 列出 eJFace 支援的核心套件:

套件功能說明
org.eclipse.jface.action支援共享 UI 資源(選單、工具列、狀態列)
org.eclipse.jface.operation支援長時間運行的操作(僅保留 IRunnableWithProgress 介面)
org.eclipse.jface.preference偏好設定框架(僅提供 PreferencePage 與 PreferenceStore)
org.eclipse.jface.resource管理資源(SWT 字型、圖片、顏色等)
org.eclipse.jface.util提供屬性變更事件、監聽器清單、執行期斷言檢查等工具
org.eclipse.jface.viewers查看器框架(僅包含 TreeViewer 與 TableViewer),基於 MVC 架構

為了滿足嵌入式裝置的記憶體限制並降低實作複雜度,eJFace 移除了大量面向桌面的 JFace 套件。詳細 API 請參考 eJFace Java 文件。

關鍵套件深度解析

org.eclipse.jface.action

用於透過回應使用者操作進行互動。僅支援向狀態列添加項目,建議搭配 eSWT Command 元件使用(更易用)。動態選單會在附屬元件獲得焦點時顯示。

org.eclipse.jface.operation

僅保留 IRunnableWithProgress 介面,適用於實作長時間運行操作的類別。此類操作通常由顯示進度指示器與取消按鈕的模態對話框呈現。

org.eclipse.jface.preference

僅提供 PreferencePage 與 PreferenceStore:

  • PreferencePage:暫時性對話框,用於顯示訊息或請求有限資訊。會阻塞其他 eRCP 應用直到關閉,確保主程式執行前先收集資訊。
  • PreferenceStore:生成屬性檔案,協助應用儲存實用資訊。常用於保存從使用者輸入收集的持久資料。

org.eclipse.jface.resource

管理圖片、顏色、字型等資源:

  • ImageRegistry/ImageDescriptor:維護符號顏色名稱與 SWT 顏色的映射
  • JFaceColors:取得與儲存裝置預設顏色
  • FontRegistry/FontDescriptor:維護符號字型名稱與 SWT 字型的映射
  • CompositeImageDescriptor:抽象類別,可合成多張圖片模擬自訂圖形
  • JFaceResources:存取 eJFace 特定資源的工具方法
  • StringConverter:在各種資料類型與字串間轉換

org.eclipse.jface.viewers

僅包含 TreeViewer 與 TableViewer,均基於 MVC 架構,將內部功能與介面外觀分離,便於維護與擴展:

  • TreeViewer:基於 eSWT Tree 元件,顯示可展開/摺疊的階層資料。需實作 ITreeContentProvider 定義父子節點關係,實作 ILabelProvider 定義顯示內容,最後傳入根節點資料。
  • TableViewer:基於 eSWT Table 元件,顯示列/行資料。建立後需設定欄位、內容提供者(IStructuredContentProvider)、標籤提供者(ITableLabelProvider)與輸入資料(ArrayList)。

eJFace 與 JFace 差異對照表

eJFace 是 JFace 的嚴格子集,移除或精簡了不適合嵌入式裝置的大量函式庫。表 2 摘要主要差異:

類別說明
從 JFace 移除的套件org.eclipse.jface.dialogs、org.eclipse.jface.operation(僅保留 IRunnableWithProgress)、org.eclipse.jface.window、org.eclipse.jface.wizard
JFace 中精簡的套件org.eclipse.jface.action、org.eclipse.jface.preference(僅保留 PreferencePage)、org.eclipse.jface.viewers(僅保留 TreeViewer 與 TableViewer)
未更改的套件org.eclipse.jface.resource、org.eclipse.jface.util

移除原因分析

  • 對話框/精靈/視窗:現有程式碼皆面向桌面,移植到行動裝置需大幅修改(如手機無游標/滑鼠,對話框不宜使用按鈕)。且這些只是便利函數而非核心複雜程式碼,應用程式可自行實作。
  • Action 類別:eWorkbench 不提供傳統選單列功能,故移除大部分 Action 類別,改由 eSWT Mobile Extensions 的 Command 類別取代。
  • 不依賴 Mobile Extensions:eJFace 作為 eRCP 可選組件,不應強制依賴 Mobile Extensions。後者提供 QueryDialog 與 TimedMessageBox 替代 JFace 對話框。

實戰範例:核心元件開發

TreeViewer 範例:NBA 球隊與球員階層

建立資料模型類別 NBATeamNode 與 NBAPlayer,定義父子節點關係。在 SampleView.createPartControl() 中建立 TreeViewer,設定 SampleTreeContentProvider(實作 ITreeContentProvider)與 SampleTreeLabelProvider(實作 ILabelProvider),最後輸入根節點資料。

// 關鍵程式碼片段
treeviewer = new TreeViewer(composite);
treeviewer.setContentProvider(new SampleTreeContentProvider());
treeviewer.setLabelProvider(new SampleTreeLabelProvider());
treeviewer.setInput(getInput()); // 根節點
treeviewer.expandAll();

部署至 eWorkbench 後,可在應用程式清單中啟動「Test TreeViewer Sample」,展開球隊查看球員名單。

TableViewer 範例:書籍資料表格

建立 Book 資料模型(含名稱、ISBN、出版日期、價格、是否上市等屬性)。在 createPartControl() 中建立 TableViewer、定義欄位、設定 SampleTableContentProvider(實作 IStructuredContentProvider)與 SampleTableLabelProvider(實作 ITableLabelProvider),輸入 ArrayList<Book> 資料。

// 關鍵程式碼片段
tableviewer = new TableViewer(composite);
Table table = tableviewer.getTable();
// 定義欄位...
tableviewer.setContentProvider(new SampleTableContentProvider());
tableviewer.setLabelProvider(new SampleTableLabelProvider());
tableviewer.setInput(getInput()); // ArrayList<Book>

部署後啟動「Test TableViewer Sample」即可看到書籍資料表格。

PreferencePage 範例:伺服器認證設定

在 plugin.xml 註冊擴充點 org.eclipse.ui.preferencePages。類別繼承 PreferencePage 並實作 IWorkbenchPreferencePage。使用 PreferenceStore 儲存名稱-值對(伺服器位址、使用者名稱、密碼),提供「確定」、「取消」、「恢復預設」按鈕。

<extension point="org.eclipse.ui.preferencePages">
  <page class="preferencesample.PrefPageOne" id="preferenceSample.page1" name="Server authentication"/>
</extension>

部署後在 eWorkbench 中可見「Preference Demo Application」。

資源管理範例:ImageRegistry、FontRegistry、JFaceColors

示範如何高效管理圖片、字型、顏色資源,並結合 eSWT Command 元件實作 Action 功能。ImageRegistry 與 FontRegistry 透過 put()/get() 管理資源;JFaceColors 動態指派元件前景/背景色;StringConverter 處理字串轉換。Command 元件僅在附屬元件獲得焦點時顯示。

// 關鍵程式碼片段
ImageRegistry ir = new ImageRegistry();
ir.put("img1", new Image(display, getClass().getResourceAsStream("/icons/ibm1.png")));

FontRegistry fr = new FontRegistry(composite.getDisplay());
fr.put("SysFont", new FontData[]{new FontData("Tacoma",20,SWT.NORMAL), ...});

JFaceColors.setColors(label, display.getSystemColor(SWT.COLOR_DARK_YELLOW), display.getSystemColor(SWT.COLOR_BLUE));

點擊「Default Setting」命令可重設圖片、字型與按鈕文字。

eWorkbench 整合示範:完整應用情境

整合上述所有功能:TreeViewer 顯示 NBA/MLB 球員、根據頁面切換 PreferencePage 預設值、點選命令以 TableViewer 顯示球員戰績。完整原始碼請參考下載區。

結語

本文完整示範了 eJFace 應用程式開發步驟,對比 JFace 與 eJFace 差異,探討 eJFace 設計考量。涵蓋函式庫結構、API 用法、eRCP 環境開發、eWorkbench 整合等核心知識,並提供豐富實戰範例代碼,助您快速掌握嵌入式豐富客戶端開發精髓。

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