BlueJの使い方
Oracle製のIDE「BlueJ」を使ってみようと思います。
そもそも、「なんで使ってみようと思ったのか?」に関して、以下の理由があります。
下の動画のように、作成したクラスがクラス図(簡易バージョン)で表現されるところです。
<HelloWorldの実行動画>
他にも、継承関係も表示できる用ですので、クラス間の関係性を説明するときに、自分で確認するときにも便利です。
ライブラリの追加
スタックオーバーフローより
「Tools -> Preferences -> Libraries -> Add file」ということで。
「ツール→カスタマイズ→ライブラリタブ」を開いて、Jarファイルを追加、BlueJを再起動することで使用可能になるようです。
BlueJインストール
こちらのページからダウンロードできます。MSIファイルなので、クリックするだけでインストールできました。
そして、ドキュメント、サンプルプロジェクトもそろっているようです。
そんなわけで、上記の赤丸部分をクリックしてダウンロードした。ファイルの中身を見てみます。
注意点
コンパイルするときには、修正したクラスを全て、コンパイルする必要があります。
サンプルプロジェクト
ダウンロードしたprojects.zipを展開すると、Chapter01~16までプロジェクトが入っていました。
これらの中にあるフォルダが、BlueJで開くべきプロジェクトになります。
Chapter1のプロジェクト(figure)
開いたプロジェクトは下のような形でした。
これに、メインクラスを作成し、メインメソッドを追加して実行しました。
<実行結果>
サンプルプロジェクトを見る
ダウンロードしたZIPファイルを展開したあと、「projects」-> 「chapter01」-> プロジェクトとフォルダを下がっていく形になります。
具体的には、「projects」-> 「chapter01」-> 「home」を開きます。
プロジェクトを開いた結果
ここから、Javaプログラムの解説になります。
Java プログラム
開いたプロジェクトは、下のようなクラスがあります。
- Picture
- Circle
- Square
- Triangle
- Person
- Canvas
クラスの関係について
上記のクラス図から、Circle, Square, Triangleの3クラスがPictureクラスに呼び出されています。
そして、Picture以外のクラスがCanvasクラスを呼び出しています。
なので、ここに「」クラスを作成し、Picture、Personクラスを起動するメインメソッドを実装、起動します。
Pictureクラス
このクラスは、Circle, Square, Triangleの3クラスを呼び出しています。
詳細は、フィールド変数に上記の3クラスを持っています。
そして、コンストラクタで各クラスのインスタンス化を行い。
draw()メソッドで描画を行っています。
なので、メインメソッドでは、インスタンス化とdraw()を呼び出しを行っています。
/**
* This class represents a simple picture. You can draw the picture using
* the draw method. But wait, there's more: being an electronic picture, it
* can be changed. You can set it to black-and-white display and back to
* colors (only after it's been drawn, of course).
*
* This class was written as an early example for teaching Java with BlueJ.
*
* @author Michael Kölling and David J. Barnes
* @version 2016.02.29
*/
public class Picture
{
private Square wall;
private Square window;
private Triangle roof;
private Circle sun;
private boolean drawn;
/**
* Constructor for objects of class Picture
*/
public Picture()
{
wall = new Square();
window = new Square();
roof = new Triangle();
sun = new Circle();
drawn = false;
}
/**
* Draw this picture.
*/
public void draw()
{
if(!drawn) {
wall.moveHorizontal(-140);
wall.moveVertical(20);
wall.changeSize(120);
wall.makeVisible();
window.changeColor("black");
window.moveHorizontal(-120);
window.moveVertical(40);
window.changeSize(40);
window.makeVisible();
roof.changeSize(60, 180);
roof.moveHorizontal(20);
roof.moveVertical(-60);
roof.makeVisible();
sun.changeColor("yellow");
sun.moveHorizontal(100);
sun.moveVertical(-40);
sun.changeSize(80);
sun.makeVisible();
drawn = true;
}
}
/**
* Change this picture to black/white display
*/
public void setBlackAndWhite()
{
wall.changeColor("black");
window.changeColor("white");
roof.changeColor("black");
sun.changeColor("black");
}
/**
* Change this picture to use color display
*/
public void setColor()
{
wall.changeColor("red");
window.changeColor("black");
roof.changeColor("green");
sun.changeColor("yellow");
}
}
Mainクラス
このクラスは、筆者が作成したクラスです。単純にPictureクラスとPersonクラスをインスタンス化してそれぞれ描画するメソッドを起動しています。
public class Main
{
public static void main(String[] args) {
Picture pic = new Picture();
Person per = new Person();
pic.draw();
per.makeVisible();
}
}
Extension(拡張)
拡張機能に関して、こちらの記事にありました。
BlueJはSwingを使用して作成されているのか。。。拡張するのにSwingを使用して拡張するようです。
次の例では、ユーザーが開いたすべての BlueJ プロジェクトの名前をログに記録する拡張機能を実装しSystem.out 、他の拡張機能の使用方法を示します。インストールすると、次のようにも表示されます。
- BlueJ ヘルプメニューの「Installed Extensions」パネルにあるエントリ
- (あまり役に立たない) BlueJ の [ツール] メニューへのメニュー エントリ、および既存のクラスのソース コードにコメントを追加するものを含む、クラスおよびオブジェクト用に表示されるメニューへのエントリ。
- Tools/Preferences/Extensions パネルのエントリで、お気に入りの色を入力 (および保存) します。
拡張機能の完全なソース コードはこちらです。
単体テスト
こちらにあるドキュメントを見るとやり方が書いてあるのですが、ちょっと違うようで。。。
テストクラスを作成する
下の図のように、対象クラスを右クリックします。そして、「テストクラスの作成」を選択します。
すると、下のようなクラスが作成されます。
対象にしているクラスはXMLUtilクラスです。
作成したクラスは、下のように表示されます。