2003-04-09
@ [jFFFTP] 今日のjFFFTP
クラス数が多くなってきてごちゃごちゃしてたのでちょっとパッケージなどを整理。あとはHelpでライセンス情報などを表示できるようにした。ところでSWTでショートカットキーってどうやって割り当てるんだろう...
追記: メニューのアイテムに対しては、MenuItem#setAcceleratorを使えば良さそう。
追記2: って思いっきりSWT掲示板に書いてあるね。ただいまJFaceではどうやってメニューにショートカットキーを割り当てるのか調査中(仕事しろよ)。
@ [jface] メニューの表示
ちょいと時間があるのでメモ。JFaceでウィンドウにメニューを表示したい場合は、org.eclipse.jface.action.MenuManagerを使用すればいいらしい。概念的にはSWTと同じく、MenuManagerクラスがメニューバーおよびメニューのコンポーネントとなっているようだ。
Windowクラスを継承したクラスで、そのウィンドウにメニューを表示させるには、 createMenuManager メソッドをオーバライドすればよい。
package demo;
import org.eclipse.jface.action.*;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.*;
/**
* Windowクラス
*/
public class MyWindow extends ApplicationWindow {
/**
* コンストラクタ
*
* @param parent このウィンドウの親のShell。
* トップレベルのウィンドウの場合はnull。
*/
public MyWindow(Shell parent) {
super(parent);
}
/**
* このウィンドウのShellの設定を行なう。
*/
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("へろうわーるど");
shell.setSize(500, 200);
}
/**
* このウィンドウのコンテンツを作成する。
*/
protected Control createContents(Composite parent) {
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL | SWT.NULL);
getMenuBarManager().updateAll(true);
return parent;
}
/**
* このウィンドウを作成する。
*/
public void create() {
addMenuBar();
super.create();
}
/**
* このウィンドウのMenuManagerを作成する。
* MenuManagerに登録されているものが、メニューとして表示される。
*
* @return このウィンドウのMenuManager
*/
protected MenuManager createMenuManager() {
// メニューバーの作成
MenuManager bar = new MenuManager();
// "File"メニューの作成
MenuManager fileMenu = new MenuManager("File");
// メニューのアイテムを作成
Action openAction = new MyAction("Open");
Action saveAction = new MyAction("Save");
Action exitAction = new MyAction("Exit");
fileMenu.add(openAction);
fileMenu.add(saveAction);
fileMenu.add(new Separator());
fileMenu.add(exitAction);
bar.add(fileMenu);
return bar;
}
}
なお、このMyWindowクラスでは、createメソッドを継承して、addMenuBarメソッドを呼んでいるが、これをsuper.createの前に行なわないとNullPointerExceptionが発生するので注意*1。メニューに追加しているMyActionというのは、org.eclipse.jface.action.Actionを継承したクラスで、このクラスのrunメソッド内で、メニュー押下時のコードを記述していけばOK。
MyActionのサンプルコードはこんな感じ。
package demo;
import org.eclipse.jface.action.Action;
/**
* Action
*/
public class MyAction extends Action {
public MyAction(String text) {
super(text);
}
public void run() {
System.out.println("ほげほげ");
}
}
なお、MyWindowクラスを使用するMainのコードは前回と同じ。
上記のコードをコソパイルして実行するとこんな感じでメニューが表示される(GTK+版の場合)

*1 なんでかはようわかりましぇん。きっとコンポーネントを作成する順序の問題なんでしょう。
2004-04-09
@ [memo] 不要分岐の除去を中心とするオブジェクト高度最適化の研究
コンパイラの最適化の研究の論文。役に立ちそうなのでメモ。
@ [linux] qmailsolutions
企業のページみたい。でも情報が色々ある。
2005-04-09
@ [win] Poderosa
.NETで実装されたウィンドウズ用タブ型ターミナルエミュレータ。スクリーンショットやFAQを見るとCygwinのシェルも使えるようです。これは便利そう。(from メモの日々
@ [java] Buoy
Swingを使い易くするためのツールキットだそうです。変な名前。IBM developerWorks Buoyを使って、単純なJava UIプログラミングを容易により。