SWTのBrowserコンポーネント拡張のコツ

2018年5月7日

タイトルだけだと意味不明ですが、何年かぶりにJavaでGUI(SWT)を書いてます。
Windowsのコンポーネント(OLE)を呼んでるんで、速くて簡単なんですけど、
ここいらのクラスは、なんというかほとんどprotected扱いなので、
拡張(継承)するのにちょいと手間が必要だったりしました、のでメモしておきます。
(毎回忘れて毎回調べてるため・・・)

んーでも、JavaのGUIなんて、AWT以来だなー、懐かしいなー。
(と思ったんですが、良く考えたらiアプリでちょっとやってた、こんちくしょうコンテキスト)

↓メモ本文は全文表示で

SWTのBrowserの拡張はこのURLで
http://hp.vector.co.jp/authors/VA000137/rss_reader/extends_browser.html

メモその1:
SWTのいろいろなのを継承しようとすると、コンパイルは通るんですけど実行時に、
org.eclipse.swt.SWTException: Subclassing not allowed
とか言われてエラーになります。
ですが、継承するクラスでこういうメソッドを実装しておくと回避できます。
protected void checkSubclass() {}

メモその2:
Browserクラスとかでも、使いたいオブジェクトがほとんどフィールド変数ですので、
リフレクションを使ってアクセスするんですけど、、、
しかし自分が継承して作る場合、親クラス(super)を指定する方法は、
super.getClass()ではなくて、this.getClass().getSuperclass()です。

↓親クラスの変数「auto」を取得
OleAutomation myAuto=null;
try {
Class c = this.getClass().getSuperclass();
Field f = c.getDeclaredField(“auto");
f.setAccessible(true);
myAuto = (OleAutomation)f.get(this);
}
catch ( NoSuchFieldException nsfe) {}
catch ( IllegalAccessException iae) {}