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

Eclipse Forms 程式設計入門:從 HelloWorld 到表單控件實戰

     編輯:Java 相關知識

Eclipse Forms 是 Eclipse 3.0 引入的 UI 工具包,提供類 Web 表單的豐富佈局與控件,廣泛用於 PDE(Plugin Development Environment)等官方編輯器。本文從核心概念入手,通過完整示例演示視圖創建、超鏈接、通用控件佈局與邊框繪製等關鍵技術。

核心概念

  • FormToolkit:管理顏色、字體、邊框、超鏈接組等視覺資源的工廠類,必須在 dispose() 中釋放。
  • Form / ScrolledForm:頂層容器,包含標題欄、工具欄、體內容區(Body)。
  • Body (Composite):表單實際內容區,可設置佈局管理器(如 GridLayout、TableWrapLayout)。
  • 定制控件:Hyperlink、ImageHyperlink、ExpandableComposite、Section 等,風格統一、支持平面外觀。

快速入門:HelloWorld 視圖

public class FormView extends ViewPart {
    private FormToolkit toolkit;
    private ScrolledForm form;

    @Override
    public void createPartControl(Composite parent) {
        toolkit = new FormToolkit(parent.getDisplay());
        form = toolkit.createScrolledForm(parent);
        form.setText("Hello, Eclipse Forms");
    }

    @Override
    public void setFocus() {
        form.setFocus();
    }

    @Override
    public void dispose() {
        toolkit.dispose();  // 關鍵:釋放顏色、字體等系統資源
        super.dispose();
    }
}

plugin.xml 關鍵配置

<requires>
    <import plugin="org.eclipse.ui"/>
    <import plugin="org.eclipse.core.runtime"/>
    <import plugin="org.eclipse.ui.forms"/>  <!-- 必須依賴 -->
</requires>

<extension point="org.eclipse.ui.views">
    <view class="org.xqtu.samples.views.FormView" name="Form Sample" id="FormView"/>
</extension>

進階:添加超鏈接與事件響應

Composite body = form.getBody();
GridLayout layout = new GridLayout();
body.setLayout(layout);

Hyperlink link = toolkit.createHyperlink(body, "Click here.", SWT.WRAP);
link.addHyperlinkListener(new HyperlinkAdapter() {
    @Override
    public void linkActivated(HyperlinkEvent e) {
        System.out.println("Link activated!");
    }
});
  • 獲取 Body:form.getBody() 返回 Composite,可直接設置佈局。
  • 創建超鏈接:toolkit.createHyperlink() 返回樣式統一的 Hyperlink 控件。
  • 事件監聽:實現 HyperlinkAdapter 處理點擊、懸停等事件。

實戰:混合佈局標籤、文本框、複選框

// 續上例
layout.numColumns = 2;

// 超鏈接跨兩列
GridData gd = new GridData();
gd.horizontalSpan = 2;
link.setLayoutData(gd);

// 標籤 + 文本框
Label label = toolkit.createLabel(body, "Text field label:");
Text text = toolkit.createText(body, "");
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// 關鍵:設置 FLAT 邊框風格
text.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);

// 複選框跨兩列
Button checkbox = toolkit.createButton(body, "An example of a checkbox in a form", SWT.CHECK);
gd = new GridData();
gd.horizontalSpan = 2;
checkbox.setLayoutData(gd);

// 統一重繪邊框(實現平面外觀)
toolkit.paintBordersFor(body);

關鍵點解析

  1. GridLayout + GridData:實現類 HTML 表格的靈活佈局,horizontalSpan 對應 colspan。
  2. FormToolkit 創建控件:createLabel()、createText()、createButton() 返回的控件自動應用工具包管理的顏色/字體。
  3. FLAT 邊框實現:
    • Text 默認 3D 邊框,需 setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER) 標記
    • 調用 toolkit.paintBordersFor(parent) 統一重繪容器內所有標記控件的邊框
  4. 資源管理:FormToolkit 內部緩存 Color、Font、Image 等系統資源,必須在 part 銷毀時調用 dispose(),否則會導致句柄洩漏。

常用控件速查

控件創建方法典型用途
HyperlinkcreateHyperlink()導航、命令觸發
ImageHyperlinkcreateImageHyperlink()圖標按鈕
SectioncreateSection()可摺疊內容區塊
ExpandableCompositecreateExpandableComposite()可展開/摺疊面板
TableWrapLayoutnew TableWrapLayout()更強大的表格式佈局

最佳實踐提醒

  • 始終使用 FormToolkit 創建控件,避免直接 new SWT 控件導致風格不一致。
  • 佈局調試時開啟 LayoutDebug(org.eclipse.swt.internal.widgets.LayoutDebug)可視化邊界。
  • 大型表單考慮使用 MasterDetailsBlock 實現主從聯動(如屬性視圖)。
  • 遷移舊代碼時,逐步替換 SWT 原生控件為 Forms 對應控件,統一視覺風格。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved