この記事から次のことを学びます。
- 主な競合他社であるSwingとは対照的に、SWTを使用する動機は何ですか
- Java + 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();
ここでやったこと:
- 彼らはディスプレイを作成し、シェルはディスプレイを使用すると言いました。 (私の意見では、SWTには一貫性のあるイデオロギーがあります-アプリケーションには複数の表示オブジェクトを含めるべきではありません。)
- シェルは、メインアクションが行われる場所です。 Swingとの類似性を引き出すと、ある程度JPanelの類似体であると言えます。
- 彼らは、シェルからドキュメントマネージャーとテキストエディターに注入しました。
シェル(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から:
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をいじり始める方法に関する簡単な説明
コメント、苦情、アドバイスがあれば嬉しいです。