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

Eclipse RCP 開發實戰(二):菜單、工具列與對話框

     編輯:Java 相關知識

前言

RCP 應用的命令入口在於菜單與工具列。本文詳細講解兩種建立方式:程式碼式(ActionBarAdvisor)與聲明式(actionSets 擴展點),並示範對話框作為最基礎互動單元的實作。

RCP 工作台啟動鏈路

  1. Application.run() → PlatformUI.createAndRunWorkbench()
  2. ApplicationWorkbenchAdvisor 指定預設透視圖 ID
  3. ApplicationWorkbenchWindowAdvisor 設定視窗大小、標題、CoolBar 可見性
  4. ApplicationActionBarAdvisor 負責填充菜單列與工具列

方式一:程式碼式建立(ActionBarAdvisor)

1. 定義 Action 類別

public class Action1 extends Action implements IWorkbenchAction {
    private IWorkbenchWindow window;
    public Action1(IWorkbenchWindow window) {
        if (window == null) throw new IllegalArgumentException();
        this.window = window;
    }
    @Override public void run() {
        if (window != null) {
            new FirstDialog(window.getShell()).open(); // 彈出對話框
        }
    }
    @Override public void dispose() { window = null; }
}

2. 在 ActionBarAdvisor 中註冊與佈局

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
    private IWorkbenchAction action1;

    @Override protected void makeActions(IWorkbenchWindow window) {
        action1 = new Action1(window);
        action1.setText("第一個菜單項");
        action1.setId("cn.blogjava.youxia.actions.action1");
        register(action1); // 註冊以便 Workbench 管理生命週期
    }

    @Override protected void fillMenuBar(IMenuManager menuBar) {
        MenuManager menu = new MenuManager("第一個菜單", "cn.blogjava.youxia.firstmenu");
        menuBar.add(menu);
        menu.add(action1); // 加入菜單
    }
}

方式二:聲明式擴展(actionSets)

優點:無需編譯即可修改 UI、支援圖示/工具提示/快捷鍵、可透過 Activity 動態啟停。

plugin.xml 配置

<extension point="org.eclipse.ui.actionSets">
  <actionSet id="RCP_Start.actionSet1" label="我的菜單擴展" visible="true">
    <action class="cn.blogjava.youxia.actions.Action2"
            id="RCP_Start.action2"
            label="第二個菜單項"
            icon="icons/alt_window_16.gif"
            menubarPath="cn.blogjava.youxia.firstmenu/additions"
            toolbarPath="additions"
            tooltip="第二個菜單項的按鈕"
            style="push"/>
  </actionSet>
</extension>

Action 實作 IWorkbenchWindowActionDelegate

public class Action2 implements IWorkbenchWindowActionDelegate {
    private IWorkbenchWindow window;

    @Override public void init(IWorkbenchWindow window) { this.window = window; }
    @Override public void run(IAction action) {
        new FirstDialog(window.getShell()).open();
    }
    @Override public void selectionChanged(IAction action, ISelection selection) {
        // 依選取資源啟用/停用按鈕
    }
    @Override public void dispose() { window = null; }
}

對話框實作:FirstDialog

public class FirstDialog extends Dialog {
    public FirstDialog(Shell parent) { super(parent, SWT.NONE); }

    @Override protected void createContents() {
        shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
        shell.setText("第一個對話框"); shell.setSize(150, 70);

        Button ok = new Button(shell, SWT.NONE);
        ok.setText("OK"); ok.setBounds(10,10,48,22);
        ok.addSelectionListener(e -> { result=1; shell.dispose(); });

        Button cancel = new Button(shell, SWT.NONE);
        cancel.setText("Cancel"); cancel.setBounds(89,10,48,22);
        cancel.addSelectionListener(e -> { result=2; shell.dispose(); });
    }

    @Override public int open() {
        createContents();
        shell.open(); shell.layout();
        Display display = getParent().getDisplay();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        return result;
    }
}

兩種方式對比

維度程式碼式 (ActionBarAdvisor)聲明式 (actionSets)
修改 UI需改代碼重編譯僅改 plugin.xml
動態啟停手動控制支援 Activities/Expressions
圖示/Tooltip代碼設定XML 屬性聲明
適用場景核心固定功能插件貢獻、可選功能

總結

菜單/工具列是 RCP 命令分發中樞。程式碼式適合核心固定功能,聲明式適合插件化擴展。對話框繼承 Dialog、實作 createContents() 即可快速構建模態互動。後續將探索視圖、編輯器與透視圖,構建完整應用框架。

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