Eclipse Forms 是 Eclipse 3.0 引入的公用 API(原為 PDE/Update 內部使用),提供類 HTML 表單的豐富 UI 組件與佈局系統。本文以漸進式範例,從空白表單到超連結、通用控件完整示範。
FormToolkit:資源管理核心(色彩、超連結群、外觀),**必須 dispose**ScrolledForm:可捲動表單容器,getBody() 取得內容區 CompositeGridLayout:類 HTML 表格的佈局管理器Hyperlink、ImageHyperlink、可捲動 Composite 等public class FormView extends ViewPart {
private FormToolkit toolkit;
private ScrolledForm form;
public void createPartControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createScrolledForm(parent);
form.setText("Hello, Eclipse Forms"); // 標題列文字
}
public void setFocus() { form.setFocus(); }
public void dispose() {
toolkit.dispose(); // 釋放資源
super.dispose();
}
}
plugin.xml 關鍵配置:
<requires>
<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() {
public void linkActivated(HyperlinkEvent e) {
System.out.println("Link activated!");
}
});
要點:取得 Body → 設定 GridLayout → Toolkit 建立 Hyperlink → 註冊 Listener。
layout.numColumns = 2; // 兩欄佈局
// 超連結跨兩欄
GridData gd = new GridData();
gd.horizontalSpan = 2;
link.setLayoutData(gd);
// Label + Text 欄位
Label label = toolkit.createLabel(body, "Text field label:");
Text text = toolkit.createText(body, "");
text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
// 關鍵:讓 Text 呈現 FLAT 風格(如 PDE)
text.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
// CheckBox 跨兩欄
Button checkbox = toolkit.createButton(body,
"An example of a checkbox in a form", SWT.CHECK);
gd = new GridData();
gd.horizontalSpan = 2;
checkbox.setLayoutData(gd);
// 統一重繪邊框達成 FLAT 外觀
toolkit.paintBordersFor(body);
預設 Text 為 3D 外觀,需兩步轉為 FLAT:
text.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER); 附加重繪標記toolkit.paintBordersFor(body); 觸發容器內所有標記控件重繪SWT 控件設計針對視窗/對話框,置於 Form 中會有外觀不一、色彩管理缺失等問題。**FormToolkit 建立的對應控件**能自動適配 Form 主題與色彩系統。
每頁為一個 Form 的多頁編輯器(如 PDE manifest/Plugin 編輯器)同樣基於此架構,可透過 FormEditor 實現。
掌握 FormToolkit 資源管理、GridLayout 佈局與 FLAT 風格技巧,即可快速構建專業級 Eclipse 表單介面。