前の関連記事:LibreOffice5(53)Javaの例:ConfigExamplesをPythonにする その6
Javaの例: Graphical User Interfaces
ソースは/opt/libreoffice5.2/sdk/examples/DevelopersGuide/GUIにあります。
LibreOffice5(48)Javaの例:ConfigExamplesをPythonにする その1と同様にしてまずTerminalで実行してみます。
setsdkenv_unixのランチャで起動したTerminalでソースのフォルダを開けて次のコマンドで実行できます。
make DialogDocument.run
ダイアログにオフィスのドキュメントを表示させる例です。
このような大きなダイアログが開いて、その中に新しいWriterドキュメントが表示されています。
文字が入力できますがその文字はすごく小さいです。
「Close dialog」ボタンをクリックすると終了します。
make MessageBox.run
Calc(2)課題2:選択範囲の行列番号をメッセージボックスに表示のメッセージボックスを表示させる例です。
バックグラウンドでWriterのドキュメントを開いて、LibreOffice(32)デベロッパーガイド4:コンポーネントフレームワークで学習したようにそれをモデルとしてそこからコントローラ→フレーム→コンテナウィンドウを取得して、そのツールキットのXMessageBoxFactoryインターフェイスのcreateMessageBox()メソッドでメッセージボックスを表示させています。
「OK」ボタンをクリックすると終了します。
make UnoDialogSample.run
ダイアログで使えるコントロールの例です。
コントロールの単なる表示例なので、左の枠の項目(ロードマップコントロール)を選択しても機能しません。
「Close dialog」ボタンをクリックすると終了します。
make UnoDialogSample2.run
ロードマップコントロールの使用例です。
ロードマップコントロールとは左側の枠の部分です。
左の枠の項目を選択すると右側の枠の表示が変化します。
この例だけは後ろにWriterのドキュメントが表示されており、「Close」ボタンをクリックしてもそのドキュメントは表示されたままです。
make UnoMenu.run
メニュー付きウィンドウを表示させる例です。
メニュー項目にはチェックボックス、ラジオボタンもあります。
Fisrt MenuBar Item→Close Dialog、で終了します。
make UnoMenu2.run
右クリックメニューの例です。
ポップアップメニューと呼ばれています。
Right-click hereという文字列を右クリック→Close Dialogで終了します。
make ImageControlSample.run
ダイアログに画像を表示させる例です。
Close dialogで終了します。
Javaの例:GUIをNetBeansで実行する
LibreOffice5(36)UNOコンポーネントのJavaの例:TestJavaComponentと同様にしてNetBeans8.0.2のプロジェクトにできました。
プロジェクト名はGUIとしました。
ImageControlSampleの例はPlease pass a parameter denoting the system path to your graphic!と言われてダイアログは表示されません。
この例では実行時にoologo.gifを引数に渡さないといけません。
NetBeansのプロジェクトに引数を渡すには引数を渡したいクラスをプロジェクトのメインクラスに設定しないといけません。
プロジェクトエクスプローラでプロジェクトGUIを選択して右クリック→プロパティ。
カテゴリ、から実行を選択しメインクラスにImageControlSampleを選択します。
引数にoologo.gifへの絶対パス/opt/libreoffice5.2/sdk/examples/DevelopersGuide/GUIを入力しました。
相対パスの./oologo.gifでは画像が読み込まれませんでした。
NetBeansのメニューから実行→プロジェクト(GUI)を実行、で実行できました。
エディタ画面から、右クリック→ファイルの実行、では引数が渡されません。
makefileに載っていない例: SystemDialog.java
NetBeansにGUIの例のソースを読み込んだときにmakefileに載っていない例SystemDialog.javaがあるのに気が付きました。
104行目でエラーがでていますがこれはその前の行のshortをShortに直すとエラーが消えました。
エラーが消えましたが実行するとエラーがでてきます。
run: Connected to a running office ... com.sun.star.lang.DisposedExceptionnull com.sun.star.lang.DisposedException at com.sun.star.lib.uno.environments.remote.JobQueue.removeJob(JobQueue.java:198) at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:316) at com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:289) at com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:81) at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:618) at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:145) at com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:129) at com.sun.proxy.$Proxy2.createInstanceWithContext(Unknown Source) at SystemDialog.raiseSaveAsDialog(SystemDialog.java:83) at SystemDialog.main(SystemDialog.java:67) Caused by: java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392) at com.sun.star.lib.uno.protocols.urp.urp.readBlock(urp.java:367) at com.sun.star.lib.uno.protocols.urp.urp.readMessage(urp.java:98) at com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge$MessageDispatcher.run(java_remote_bridge.java:92) ビルド成功(合計時間: 3秒)83行目のcom.sun.star.ui.dialogs.FilePickerをインスタンス化するときにエラーがでていました。
解決法はPythonに変換してから考えることにします。
(2017.8.11追記。原因がわかりました。FilePickerサービスをオートメーションでインスタンス化するとエラーになるようです。)
参考にしたサイト
LibreOffice 5.3 SDK - Developer's Guide Examples
このJavaの例のGUIを実行しました。
0 件のコメント:
コメントを投稿