Eclipse プラグインでタスクトレイのアイコンを制御する方法です。 Windowsのタスクトレイや、Macのメニューバーにアイコンを表示するには、 private TrayItem initTaskItem(IWorkbenchWindow window, String toolTip) { final Tray tray = window.getShell().getDisplay().getSystemTray(); TrayItem trayItem = new TrayItem(tray, SWT.NONE); trayItem.setImage(appIconImage); trayItem.setToolTipText(toolTip); return trayItem; } という感じでTrayItem?を生成し、 final Shell shell = window.getShell(); final MenuManager trayMenu = new MenuManager(); final Menu menu = trayMenu.createContextMenu(shell); trayMenu.add(ActionFactory.PREFERENCES.create(window)); ← Eclipseの「設定」を追加してみた とやってMenuManager?を生成、最後に trayItem.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent e) { menu.setVisible(true); } }); 動かしてみると、、、 表示されました。。 終了時のDisposeなど含め、全体のソースはこんな感じ。 package nu.mine.kino.plugin.tasktray; import org.apache.log4j.Logger; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.MenuManager; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuDetectEvent; import org.eclipse.swt.events.MenuDetectListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tray; import org.eclipse.swt.widgets.TrayItem; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchWindowAdvisor; import org.eclipse.ui.plugin.AbstractUIPlugin; public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { /** * Logger for this class */ private static final Logger logger = Logger .getLogger(ApplicationWorkbenchWindowAdvisor.class); private TrayItem trayItem; private Image appIconImage; private IWorkbenchWindow window; public ApplicationWorkbenchWindowAdvisor( IWorkbenchWindowConfigurer configurer) { super(configurer); // Task Tray のアイコンイメージ appIconImage = AbstractUIPlugin.imageDescriptorFromPlugin( TaskTrayPlugin.PLUGIN_ID, "/icons/application.png") .createImage(); } public ActionBarAdvisor createActionBarAdvisor( IActionBarConfigurer configurer) { return new ApplicationActionBarAdvisor(configurer); } public void preWindowOpen() { // ここはアプリ(GUI)を画面に表示しないための処理で、タスクトレイとは関係ない IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(1, 1)); configurer.setShowCoolBar(false); configurer.setShowStatusLine(false); configurer.setShellStyle(SWT.NONE); // configurer.setTitle("TaskTray RCP"); //$NON-NLS-1$ } @Override public void postWindowOpen() { window = getWindowConfigurer().getWindow(); // ここはアプリ(GUI)を画面に表示しないための処理で、タスクトレイとは関係ない Shell shell = window.getShell(); shell.setMinimized(true); shell.setVisible(false); super.postWindowOpen(); initTrayItem("Retrieving information ..."); } private void initTrayItem(String toolTip) { if (trayItem != null) { trayItem.dispose(); } trayItem = initTaskItem(window, toolTip); final Shell shell = window.getShell(); final MenuManager trayMenu = new MenuManager(); final Menu menu = trayMenu.createContextMenu(shell); trayMenu.add(ActionFactory.PREFERENCES.create(window)); final IWorkbenchAction quitAction = ActionFactory.QUIT.create(window); trayMenu.add(new Action() { { setText("Quit"); } @Override public void run() { // defaultのquitActionだと、場合によってアプリが終了しないケースがあったため // 自前で終了処理。どうも画面にUIがないとダメなケースがあるぽい。 shell.setVisible(true); shell.setMinimized(false); quitAction.run(); } }); trayItem.addMenuDetectListener(new MenuDetectListener() { public void menuDetected(MenuDetectEvent e) { menu.setVisible(true); } }); trayItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetDefaultSelected(SelectionEvent e) { // トレイのアイコンをダブルクリックしたときの処理 } }); } private TrayItem initTaskItem(IWorkbenchWindow window, String toolTip) { final Tray tray = window.getShell().getDisplay().getSystemTray(); TrayItem trayItem = new TrayItem(tray, SWT.NONE); trayItem.setImage(appIconImage); trayItem.setToolTipText(toolTip); return trayItem; } /* * (non-Javadoc) * * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#dispose() */ @Override public void dispose() { logger.debug("dispose() - start"); appIconImage.dispose(); trayItem.dispose(); super.dispose(); logger.debug("dispose() - end"); } } この記事は 現在のアクセス:11243 |