Object Design
Home > Index > Processing + Java で Hello World(ハローワールド)...Javaアプリケーションにプロセッシングのスケッチを埋め込む方法

Processing + Java で Hello World(ハローワールド)...Javaアプリケーションにプロセッシングのスケッチを埋め込む方法

hello processing

Processingは、 通常 PDE と呼ばれる統合開発環境でスケッチしながら使います。 スケッチの成果物は、アプレットとして書き出して単体配布できます。
これは、これで便利な機能ですが、Javaプログラマであれば、 直接JavaにProcessingを埋め込んで使った方が早い場合があります。 Eclipse上で開発すれば、コード補完も効きますからPDEを使わなくても、 スケッチもはかどります。

TOC

お約束のHello World

ということで、Javaに埋め込む方法を整理しました。 といっても基本は、processing.core.PApplet を継承して、 スケッチコード(setup,draw メソッド)を追加するだけです。

MyPApplet.java

import processing.core.PApplet;

class MyPApplet extends PApplet{

    private int width=300;
    private int height=250;


    public void setup(){
        size(width,height);

        textFont( createFont("Default", 9) );

        smooth();
        noLoop();
    }

    public void draw(){
        background(255,255,255);

        fill(0);

        textSize(24);
        textAlign(CENTER,CENTER);

        float x=width/2f;
        float y=height/2f;
        text("Hello World.",x,y);
    }

}

動きのないスケッチの場合は、setup()メソッドで、 noLoop() を呼んでおきます。

ただし、これだと一度だけしか draw() メソッドが呼び出されないので、 MyPAppletをのせているフレームが...

などに描画内容が失われます。

そこで、以下のように必要なタイミングで redraw() を 呼ぶように、TestFrame.javaを実装します。

TestFrame.java

import java.awt.BorderLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class TestFrame extends JFrame{

    private MyPApplet a;
    public TestFrame(){
        super();

        addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        addComponentListener(new ComponentAdapter(){
            public void componentShown(ComponentEvent e) {
                if(a!=null)
                    a.redraw();
            }
            public void componentResized(ComponentEvent e) {
                if(a!=null)
                    a.redraw();
            }
        });

        doMyLayout();
    }

    private void doMyLayout(){
        a=new MyPApplet();
        a.init();

        setLayout(new BorderLayout());
        add(a,BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        try{
            JFrame f=new TestFrame();
            f.pack();
            f.setLocation(100,100);
            f.setVisible(true);
        }
        catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

※addComponentListener()のあたりがポイントです。

コンパイルと実行に必要なjar

Processingのダウンロードページ からWindows[Without Java] のリンクをクリックして、 processing-1.0.1-expert.zip を入手します。

以下の2つの jar をカレントディレクトリにコピーして...

カレントディレクトリと core.jar,ecj.jarにパスを通してコンパイル,実行します。

$ javac -classpath .:core.jar:ecj.jar *java
$ java -cp .:core.jar:ecj.jar TestFrame

※Java Runtime Environment 1.6 でテスト

関連キーワード