SWTの最初のステップ:シンプルなタブ付きメモ帳

HabrahabrのSWTに関する記事は非常に少ないので、この小さな省略を修正しようとします。



この記事から次のことを学びます。



興味があるなら-猫をお願いします。



前文



ご存知のように、Javaはクロスプラットフォーム(1回のみ書き込み-どこでも実行)で有名であり、これはGUIアプリケーションにも当てはまります。 おそらく、JavaはGUIアプリケーションを記述するための最も一般的なプラットフォームではありません。 そして、いくつかの理由があります。



おそらくこれの主な理由は、特定のプラットフォーム向けに書かれたコードは、真空の中で抽象的なもののために書かれたコードよりも速く動作するという信念です。 まあ、私の意見では、おそらくこれは本当です。



一部の人は私に同意せず、これは単なるJavaのスタイルであると言います-一度作成すると、すべてのプラットフォームで同じように見えるはずです。 Swingは良い確認です。 もちろん、Swingアプリケーションはさまざまなテーマ(ルックアンドフィール)を使用してカスタマイズできますが、それでも独自の感じと見た目ではありません。



JetBrainsのメンバーは(少なくとも個人的には)Swingアプリケーションが非常に友好的であることを証明することができましたが、事実は変わりません。フレームワークGUIはSwingによって使用されます。Swingは、ネイティブコンポーネントよりもオペレーティングシステムとの関係がやや劣っています。



SWTはこの問題に反対側からアプローチしました。 概して、SWTはJavaプログラマーと特定のオペレーティングシステムのネイティブAPIの間の薄い層であり、Javaイデオロギーにいくらか違反しています。 しかし、彼らが言うように、ルールはそれらを破るためだけに存在します。 特にそれが善のためであるなら。 私の意見では、これがSWTに注意を払う価値がある主な動機です。



最初のステップ



読者は理解してくれると思うので、私のノートから何を達成したいのかを話すべきです。



アイデアはとてもシンプルでした:

私は、Windowsで見られる古典的なノートブックの外観を作りたかったのです。 タブのみ。



これから先、私は自分の考えを完全には理解していなかったと言います。印刷のためにドキュメントをプリンタに送信する機会、フォントを変更する機能、ドキュメントを検索する機会はありません。 しかし、何が起こったのか、私は「SWTの味」を感じることができました。



じゃあ これまでのところ、言葉はたくさんありましたが、アクションはありませんでした。 少しのコードを用意します。



アプリケーションへのエントリポイントは(Bootstrap.java)です。



final Display display = new Display(); final Shell shell = new Shell(display); final DocumentAndTabManager documentAndTabManager = new DocumentAndTabManager(shell); final TextEditor textEditor = new TextEditor(shell, documentAndTabManager); textEditor.init(); textEditor.run();
      
      







ここでやったこと:





シェル(TextEditor.java)を初期化しました:



 shell.setLayout(new FillLayout()); //    (): shell.setMenuBar(createAndSetUpMenu());
      
      







要するに、メニュー作成プロセスは次のとおりです。



  //     - ,   - : final Menu menu = new Menu(shell, SWT.BAR); //    . final MenuItem helpItem = new MenuItem(menu, SWT.CASCADE); // :  "&"    ,         Alt+H. helpItem.setText("&Help"); //  -    Item'a: final Menu helpMenu = new Menu(menu); helpItem.setMenu(helpMenu); final MenuItem about = new MenuItem(helpMenu, SWT.NONE); about.setText("About"); about.addSelectionListener(new HelpMenuAboutSelectionListener(shell));//       .
      
      







そして、アプリケーションを起動します。



  shell.open();//  while (!shell.isDisposed()) { final Display display = shell.getDisplay(); if (!display.readAndDispatch()) { display.sleep(); } } shell.dispose();
      
      







さらに、ノートブックの実行中に、リスナーの1つが(アクションの一部に応じて)動作し、そこから必要なことを行います。同期モードまたは非同期モードでタスクを実行しましょう。



  shell.getDisplay().asyncExec(new ReloadJob(documentAndTabManager, currentTab));
      
      







パッキング



私が遭遇した疑似困難の別の部分:

オペレーティングシステムとアーキテクチャごとに、独自のビルドを作成する必要があります。 このためには、特定のプラットフォームごとにjarが必要です。 私はMavenの使用に慣れていますが、残念ながらMavenリポジトリに最新のSWTバージョンが見つからず、各オペレーティングシステム/アーキテクチャプラットフォームのパッケージを手動でダウンロードする必要があったため、これらの目的にはあまり適していません。 さらに、多くのカスタマイズが必要な場合、Mavenは特に適していませんが、古き良きAntが助けになります。 依存関係マネージャーとして、Ivyを採用しました。



特定のオペレーティングシステム/アーキテクチャのパッケージ化を担当するAntスクリプト(build.xml)の一部:



  <jar destfile="${package.dir}/${jar.prefix}_${target.platform}-${target.architecture}-${version}.jar" basedir="${output.dir}"> <restrict> <archives> <zips> <fileset refid="classpath.files"/> <fileset dir="${basedir}/lib/swt" includes="swt-${target.platform}-${target.architecture}.jar"/> </zips> </archives> </restrict> <manifest> <attribute name="Main-Class" value="swt.texteditor.simple.Bootstrap"/> </manifest> </jar>
      
      







Jarのサイズは2-2.5 MB(OSとアーキテクチャに依存)でしたが、実際にはそれほどではありません。



結論の代わりに



短い開発サイクルを経て、気付くことができます



私の意見ではSWTの短所:

*小さなドキュメント/チュートリアル

* Googleは、SwingほどSWTについて知りません。

*多くの問題はより長く解決する必要があります。



私の意見ではSWTの長所:

*一般的に、シンプルで理解可能なAPI

*クロスプラットフォームのネイティブ探しアプリ

* Swingの場合よりもすぐに使用可能



この小さな実験から何を学びましたか?



その魅力と欠点をすべて備えたSWTは、私に良い印象を与えました。 次回デスクトップアプリケーションを作成することにしたときは、間違いなくJava + SWTバンドルを選択します。



PS最後にいくつかのスクリーンショット。



Linuxから:



Ubuntu(Unity)のネイティブスクロール





Ubuntu(Unity)のネイティブメニュー





Windowsから:







残念ながら、Mac OSでは、Mac OS Xがないためのスクリーンショットはありません。

seneastによる親切なスクリーンショット:

画像



ソースコードはここから入手できます: code.google.com/p/swt-text-editor/source/browse

OS用のメモ帳のバリエーションは、 code.google.com / p / swt-text-editor / downloads / listからダウンロードできます。

Windowsでは、Mac OS Xではjava -XstartOnFirstThread -jar simple_edit *。、Linuxではコマンドjava -jar simple_edit *をダブルクリックして起動します。 Java 1.6以降で実行されます。

IDEコード(英語) code.google.com/p/swt-text-editor/wiki/SourceCodeImportをいじり始める方法に関する簡単な説明



コメント、苦情、アドバイスがあれば嬉しいです。



All Articles