2017年06月 / 05月≪ 123456789101112131415161718192021222324252627282930≫07月

2011.12.18 (Sun)

eclipse 3.7 indigo で Scala から WindowBuilder と SWT を使ってみる

ども、スィンです。
前回の続きで、Scala でチャレンジしてみました。
よくわからなくてここままじゃできなさそう?なので、諦めました。
とりあえず、Javaで書いた SWT フォームコードを Scala から呼ぶようにしました。

■したいこと
Scala で 見栄えの良いフォームアプリが作りたい。

■残課題(ご存知の方がいたらぜひご教授願います)
・WindowBuilder で Scala のテンプレートコードは吐けないの?
・Scalaのコードは WindowBuilderで開けないの?
・WindowBuilder のレイアウトで、Visual Studio と同じレイアウト方式のものはないのか。

■比較検討
・Scala じゃなくて、もう Java でええやん、と思いそうになった。

■成果物
プロジェクトファイル:(サンプルコードを掲載したため割愛)
ダウンロードパスワード: ----

■手順
▼事前準備
前回の記事を元に、eclipse 3.7 indigo を準備して、 WindowBuilder for SWT プラグインを入れておく。

▼Scala IDE for Eclipse プラグインをダウンロード
Scala IDE for Eclipse」のサイトを開き「Copy update site URL to clipboard」を押す。
「ヘルプ>新規ソフトウェアのインストール」を選択。
作業環境の追加ボタンを押し、ロケーションをクリップボードから貼付け、名前は Scala などに。
登録した作業対象を選択して、すべてをインストール。

▼プロジェクトの作成
「ファイル>新規>Scala ウィザード>Scala プロジェクト」を作成。

▼ビルドパスの追加
プロジェクトのプロパティ「Javaのビルドパスを開く。
ライブラリタブ「外部Jar追加」ボタンを押す。
「eclipseインストールPATH\plugins\org.eclipse.swt.win32.win32.x86_3.7.1.v3738a.jar」を選択。

▼SWT アプリケーションウインドウを追加
※以下の手順は Java コードが生成される。パッケージは Scala コードと分けておくと良いかも。
「ファイル>新規>その他」より、
「WindowBuilder > SWT Designer > SWT > Application Window」を選択。

▼フォームデザインの編集
ソースファイルを右クリック「アプリケーションから開く>WindowBilder Editor」で開く。
「Design」タブを選択して自由にGUIを作成。

sample_form.java
package com.sinproject.java;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;

public class sample_form {

	protected Shell shell;

	/**
	 * Launch the application.
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			sample_form window = new sample_form();
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(450, 300);
		shell.setText("SWT Application");

		Label label = new Label(shell, SWT.NONE);
		label.setBounds(10, 10, 227, 18);
		label.setText("サンプルフォーム");
	}
	
}

▼Scala オブジェクトの作成
「ファイル>新規>Scala ウィザード>Scala プロジェクト」を作成。
main メソッドを作成し、そこから Java + SWT で作った フォームを呼ぶ。

scala_test.scala
package com.sinproject.scala

import com.sinproject.java._

object scala_test {

	def main(args : Array[String]) : Unit = {
		println("scala project")

		sample_form.main(args)
	}

}

■今後の方針
・サイズの小さい scala バイナリを作りたい。不要なモノと必要なモノがわからない。
・可能であるならば!WindowBuilder を Scala で使う。
・自分用 scala ライブラリを作りたい。
・scala で android の Twitter クライアント作りたい。
・行動時間管理Webアプリ作りたい。
・WebアプリでIRCみたいなの作りたい。
・世界の人達をつなぐWebサイトをPlay - Scala で作りたい。
関連記事

※コメントを頂けると大変うれしいです。コメントはお気軽にどうぞ^-^

テーマ : プログラミング ジャンル : コンピュータ

01:46  |  ソフトウェア開発/プログラム  |  Trackback(0)  |  Comment(2)  |  EDIT  |  Top↑

*Comment

■WindowBuilderとScalaについて

スィンさん、はじめまして。kmizuと申します。1Scala好きとして、
多少の助けにでもなればと思い、いくつかコメントさせていただきます。

> WindowBuilder で Scala のテンプレートコードは吐けないの?

Eclipse Community Forumで以下のような話がありました。
これを見る限り、対応自体は可能なようですが、近いうちにそういう
予定は無いように見えますね。

http://www.eclipse.org/forums/index.php/m/753907/

> Scalaのコードは WindowBuilderで開けないの?

原理的に、WindowBuilder側で対応してくれないと難しいと思います。

> Scala じゃなくて、もう Java でええやん、と思いそうになった。

それはもちろんアリだと思いますが、ScalaはJavaと同じプロジェクトに
入れられるので、GUIの自動生成される部分だけJavaで、あとは
Scalaという使い分けは可能かと。

> ・サイズの小さい scala バイナリを作りたい。不要なモノのと必要なモノがわからない。

Scalaが実行時に必要とするscala-library.jarが結構大きいのが問題ですが、一つのjarが大きいので、手で分解してshrinkするのはかなり手間です。ProGuardを使えば、scala-library.jarの中から不要な部分への参照を削ってくれるので、かなりjarのサイズを小さくできます。

http://proguard.sourceforge.net/

> scala で android の Twitter クライアント作りたい。

かなり少ないですがマーケットにScalaで作ったAndroidアプリを
出している人は居ます。ScalaでAndroid環境を構築するためには、
今ならsbtを使った方法が一番良いかと思います。例えば、以下で
試している人が居ます。

http://d.hatena.ne.jp/rudeboyjet/20111014/p1


ただ、いかんせん、トライしている人の数が少ないので、まだある程度の
試行錯誤は必要かもしれません。
kmizu |  2011.12.18(日) 02:11 |  URL |  【コメント編集】

■RE:WindowBuilderとScalaについて

>kmizu さん

はじめまして、スィンです。
この度は、コメント有難うございました。

やはりWindowBuilderはScalaに対応していないのですね。
今回はJavaのコードをScalaで呼ぶように実装しました。

ProGuardは避けて通れなさそうですね。
ProGuardでのShrinkはまだやったことがなく、
難しそ~という印象です。IDEでココらへんは簡単に出来れば嬉しい。

sbt の情報もありがとうです。
新しい言語や環境での開発は、とっかかりが難しくて
すぐにお腹いっぱいになってしまいますね。
すこしずつ吸収していけたらと思います。

色々とありがとうございます。
これからもよろしくお願いいたします。
スィン |  2011.12.18(日) 11:06 |  URL |  【コメント編集】

コメントを投稿する

URL
COMMENT
PASS  編集・削除するのに必要
SECRET  管理者だけにコメントを表示
 

*Trackback

この記事のトラックバックURL

この記事へのトラックバック

 | BLOGTOP |