Archive for 12月, 2012

  1. Hello, AWT(Jasmin) World!

    Posted on 12月 31st, 2012 by cx20

    AWT(Java)

    AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
    以下は Jasmin による AWT の使用例となっている。

    ソースコード

    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Sun Dec 02 00:54:44 JST 2012
     
    .bytecode 51.0
    .source Hello.java
    .class public Hello
    .super java/awt/Frame
     
    .method public static main([Ljava/lang/String;)V
        .limit stack 3
        .limit locals 2
        .var 0 is arg0 [Ljava/lang/String; from Label0 to Label1
     
        Label0:
    .line 6
           0: new Hello
           3: dup
           4: ldc "Hello, World"
           6: invokespecial Hello/<init>(Ljava/lang/String;)V
           9: astore_1
     
        .line 7
          10: aload_1
          11: iconst_1
          12: invokevirtual Hello/setVisible(Z)V
     
        Label1:
    .line 8
          15: return
     
    .end method
     
    .method  <init>(Ljava/lang/String;)V
        .limit stack 4
        .limit locals 3
        .var 0 is this LHello; from Label0 to Label1
        .var 1 is arg0 Ljava/lang/String; from Label0 to Label1
     
        Label0:
    .line 11
           0: aload_0
           1: aload_1
           2: invokespecial java/awt/Frame/<init>(Ljava/lang/String;)V
     
        .line 13
           5: aload_0
           6: new java/awt/FlowLayout
           9: dup
          10: iconst_0
          11: invokespecial java/awt/FlowLayout/<init>(I)V
          14: invokevirtual Hello/setLayout(Ljava/awt/LayoutManager;)V
     
        .line 15
          17: new java/awt/Label
          20: dup
          21: ldc "Hello, AWT World!"
          23: invokespecial java/awt/Label/<init>(Ljava/lang/String;)V
          26: astore_2
     
        .line 16
          27: aload_0
          28: aload_2
          29: invokevirtual Hello/add(Ljava/awt/Component;)Ljava/awt/Component;
          32: pop
     
        .line 18
          33: aload_0
          34: new HelloWindowAdapter
          37: dup
          38: invokespecial HelloWindowAdapter/<init>()V
          41: invokevirtual Hello/addWindowListener(Ljava/awt/event/WindowListener;)V
     
        .line 19
          44: aload_0
          45: sipush 640
          48: sipush 480
          51: invokevirtual Hello/setSize(II)V
     
        Label1:
    .line 20
          54: return
     
    .end method
    ; Produced by NeoJasminVisitor (tinapoc)
    ; http://tinapoc.sourceforge.net
    ; The original JasminVisitor is part of the BCEL
    ; http://jakarta.apache.org/bcel/
    ; Sun Dec 02 00:54:57 JST 2012
     
    .bytecode 51.0
    .source Hello.java
    .class  HelloWindowAdapter
    .super java/awt/event/WindowAdapter
     
    .method  <init>()V
        .limit stack 1
        .limit locals 1
        .var 0 is this LHelloWindowAdapter; from Label0 to Label1
     
        Label0:
    .line 24
           0: aload_0
           1: invokespecial java/awt/event/WindowAdapter/<init>()V
     
        Label1:
           4: return
     
    .end method
     
    .method public windowClosing(Ljava/awt/event/WindowEvent;)V
        .limit stack 1
        .limit locals 2
        .var 0 is this LHelloWindowAdapter; from Label0 to Label1
        .var 1 is arg0 Ljava/awt/event/WindowEvent; from Label0 to Label1
     
        Label0:
    .line 26
           0: iconst_0
           1: invokestatic java/lang/System/exit(I)V
     
        Label1:
    .line 27
           4: return
     
    .end method

    コンパイル&実行方法

    C:¥> java -jar jasmin.jar Hello.j HelloWindowAdapter.j
    C:¥> javaw Hello

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, AWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  2. Hello, Java 3D(Fantom) World!

    Posted on 12月 30th, 2012 by cx20

    Java 3D

    Java 3D は Java による 3D グラフィックライブラリである。
    以下は Fantom による Java 3D の使用例となっている。

    ソースコード

    using [java] java.awt
    using [java] javax.swing
    using [java] javax.media.j3d
    using [java] javax.vecmath
    using [java] com.sun.j3d.utils.universe
     
    using concurrent
     
    class Hello
    {
        Void main()
        {
            frame := JFrame("Hello, World")
            {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
                setSize(640, 480)
            }
            canvas3D := createCanvas3D(frame)
            scene := createSceneGraph()
            connect(canvas3D, scene)
            frame.setVisible(true)
     
            Actor.sleep(Duration.maxVal)
        }
        Canvas3D createCanvas3D( JFrame frame )
        {
            frame.getContentPane().setLayout( BorderLayout() )
            config := SimpleUniverse.getPreferredConfiguration()
            canvas3D := Canvas3D( config )
            frame.getContentPane().add( canvas3D )
            return canvas3D
        }
     
        BranchGroup createSceneGraph()
        {
            objRoot := BranchGroup()
            mover := moveTextBack()
            spinner := createSpinner()
            rotator := RotationInterpolator(Alpha(-1, 4000), spinner, Transform3D(), 0.0f, 3.14159265f * 2)
            rotator.setSchedulingBounds( BoundingSphere() )
            spinner.addChild(rotator)
            objRoot.addChild(mover)
            mover.addChild(spinner)
            spinner.addChild( createTextShape())
            setLighting(mover)
            return objRoot
        }
     
        TransformGroup createSpinner()
        {
            spinner := TransformGroup()
            spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE)
            return spinner
        }
     
        TransformGroup moveTextBack()
        {
            transform3D := Transform3D()
            transform3D.setTranslation( Vector3f(0.0f, 0.0f, -10.0f))
            return TransformGroup(transform3D)
        }
     
        Shape3D createTextShape()
        {
            textAppear := Appearance()
            textAppear.setMaterial(Material())
            font3D := Font3D( Font("MS Pゴシック", Font.PLAIN, 1), FontExtrusion())
            textGeom := Text3D(font3D, "Hello, Java 3D World!")
            textGeom.setAlignment(Text3D.ALIGN_CENTER)
            textShape := Shape3D()
            textShape.setGeometry(textGeom)
            textShape.setAppearance(textAppear)
            return textShape
        }
     
        Void setLighting( TransformGroup objMove )
        {
            light := DirectionalLight()
            light.setInfluencingBounds(BoundingSphere())
            light.setDirection(Vector3f(0.0f,0.0f,-1.0f))
            light.setColor(Color3f(1.0f, 1.0f, 1.0f))
            objMove.addChild(light)
        }
     
        Void connect( Canvas3D canvas3D, BranchGroup scene )
        {
            universe := SimpleUniverse(canvas3D)
            universe.getViewingPlatform().setNominalViewingTransform()
            universe.addBranchGraph(scene)
        }
    }

    実行方法

    C:¥> fan Hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  3. Hello, Java 2D(Fantom) World!

    Posted on 12月 29th, 2012 by cx20

    Java 2D

    Java 2D は Java による 2D グラフィックライブラリである。
    以下は Fantom による Java 2D の使用例となっている。

    ソースコード

    using [java] java.awt
    using [java] javax.swing
    using concurrent
     
    class Hello
    {
        Void main()
        {
            canvas := Canvas()
            frame := JFrame("Hello, World")
            {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
                add(canvas)
                setSize(640, 480)
                setVisible(true)
                canvas.createBufferStrategy(2)
                strategy := canvas.getBufferStrategy
                g2 := (Graphics2D)strategy.getDrawGraphics
                while(true)
                {
                    g2.drawString("Hello, Java 2D World!", 0, 16 )
                    strategy.show
                    Actor.sleep(200ms)
                }
            }
            Actor.sleep(Duration.maxVal)
        }
    }

    実行方法

    C:¥> fan hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  4. Hello, JavaFX(Fantom) World!

    Posted on 12月 28th, 2012 by cx20

    JavaFX(Jython)

    JavaFX は Java による RIA 向けの GUI ライブラリならびにプラットフォームである。
    類似の RIA プラットフォームとしては Adobe Flex や Microsoft Silverlight などがある。
    以下は Fantom による JavaFX の使用例となっている。

    ディレクトリ構成

    %FANTOM_HOME%
        /lib
            /java
               /ext         … ライブラリ配置場所
     
    1. %FANTOM_HOME%libjavaetc にライブラリ配置
       jfxrt.jar
     
    2. パスの確認
       C:¥> fan compilerJava::ClassPath
     
       <実行結果>
       --- ClassPath ---
       Packages Found:
              :
         com.sun.javafx [15]
              :
       ClassPath Files:
              :
         file:/%FANTOM_HOME%/lib/java/ext/jfxrt.jar

    ソースコード

    using [java] javafx.application::Application
    using [java] javafx.stage::Stage
    using [java] javafx.scene::Scene
    using [java] javafx.scene.layout::HBox
    using [java] javafx.scene.control::Label
     
    class Hello : Application {
        Void main(Str[] args) {
            Application.launch(Hello#->toClass, args)
        }
     
        override Void start(Stage? stage) {
            hbox := HBox()
            scene := Scene(hbox, 640.0f, 480.0f)
            label := Label("Hello, JavaFX World!")
            hbox.getChildren().add( label  )
     
            stage.setScene(scene)
            stage.setTitle("Hello, World")
            stage.show()
        }
    }

    実行方法

    C:¥> fan Hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, JavaFX World!                      |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. Hello, SWT(Fantom) World!

    Posted on 12月 27th, 2012 by cx20

    SWT(Fantom)

    SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
    IBM により AWT や Swing を置き換える目的で作成された。
    以下は Fantom による SWT の使用例となっている。

    ソースコード

    using [java] org.eclipse.swt
    using [java] org.eclipse.swt.widgets::Display
    using [java] org.eclipse.swt.widgets::Shell
    using [java] org.eclipse.swt.widgets::Label
    using [java] org.eclipse.swt.layout::FillLayout
    using concurrent
     
    class Hello
    {
        Void main()
        {
            display := Display()
            shell := Shell(display)
            shell.setText("Hello, World")
     
            layout := FillLayout(SWT.VERTICAL)
            shell.setLayout(layout)
     
            label := Label(shell,SWT.BORDER)
            label.setText("Hello, SWT World!")
     
            shell.setSize( 640, 480 )
            shell.open()
     
            while (!shell.isDisposed())
            {
                if (!display.readAndDispatch())
                {
                    display.sleep()
                }
            }
     
            display.dispose()
        }
    }

    実行方法

    C:¥> fan hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, SWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. Hello, Swing(Fantom) World!

    Posted on 12月 26th, 2012 by cx20

    Swing(Fantom)

    Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
    以下は Fantom による Swing の使用例となっている。

    ソースコード

    using [java] javax.swing
    using [java] java.awt.event
    using concurrent
     
    class Hello
    {
        Void main()
        {
            label := JLabel("Hello, Swing World!")
            {
                setVerticalAlignment(JLabel.TOP)
            }
     
            frame := JFrame("Hello, World")
            {
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
                getContentPane.add(label)
                setSize(640, 480)
                add(label)
                setVisible(true)
            }
     
            Actor.sleep(Duration.maxVal)
        }
    }

    実行方法

    C:¥> fan Hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Swing World!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. Hello, AWT(Fantom) World!

    Posted on 12月 25th, 2012 by cx20

    AWT(Fantom)

    AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
    以下は Fantom による AWT の使用例となっている。

    ソースコード

    using [java] java.lang
    using [java] java.awt
    using [java] java.awt.event
    using concurrent
     
    class Hello
    {
        Void main()
        {
            label := Label("Hello, AWT World!")
            frame := Frame("Hello, World")
            {
                addWindowListener( HelloWindowAdapter.make|WindowEvent e| {})
                add(label)
                setSize(640, 480)
                setLayout(FlowLayout(FlowLayout.LEFT))
                setVisible(true)
            }
     
            Actor.sleep(Duration.maxVal)
        }
    }
     
    class HelloWindowAdapter : WindowAdapter
    {
        new make(|WindowEvent| cb) { this.cb = cb }
        override Void windowClosing(WindowEvent? e) { System.exit(0) }
        |WindowEvent| cb
    }

    実行方法

    C:¥> fan hello.fan

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, AWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. Hello, Java 3D(Rhino) World!

    Posted on 12月 24th, 2012 by cx20

    Java 3D(Rhino)

    Java 3DJava による 3D グラフィックライブラリである。
    以下は Rhino による Java 3D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
    importPackage(javax.media.j3d);
    importPackage(javax.vecmath);
    importPackage(com.sun.j3d.utils.universe);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    var canvas3D = createCanvas3D(frame);
    var scene = createSceneGraph();
    connect(canvas3D, scene);
     
    frame.setVisible(true);
     
    function createCanvas3D( frame ) {
        frame.getContentPane().setLayout(new BorderLayout());
        var config = SimpleUniverse.getPreferredConfiguration();
        var canvas3D = new Canvas3D(config);
        frame.getContentPane().add(canvas3D);
        return canvas3D;
    }
     
    function createSceneGraph() {
        var objRoot = new BranchGroup();
        var mover = moveTextBack();
        var spinner = createSpinner();
        var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0, Math.PI * 2);
        rotator.setSchedulingBounds( new BoundingSphere() );
        spinner.addChild(rotator);
        objRoot.addChild(mover);
        mover.addChild(spinner);
        spinner.addChild( createTextShape());
        setLighting(mover);
        return objRoot;
    }
     
    function createSpinner() {
        var spinner = new TransformGroup();
        spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        return spinner;
    }
     
    function moveTextBack() {
        var transform3D = new Transform3D();
        transform3D.setTranslation(new Vector3f(0.0, 0.0, -10.0));
        return new TransformGroup(transform3D);
    }
     
    function createTextShape() {
        var textAppear = new Appearance();
        textAppear.setMaterial(new Material());
        var font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion());
        var textGeom = new Text3D(font3D, new String("Hello, Java 3D World!"));
        textGeom.setAlignment(Text3D.ALIGN_CENTER);
        var textShape = new Shape3D();
        textShape.setGeometry(textGeom);
        textShape.setAppearance(textAppear);
        return textShape;
    }
     
    function setLighting( objMove ) {
        var light = new DirectionalLight();
        light.setInfluencingBounds(new BoundingSphere());
        light.setDirection(new Vector3f(0.0,0.0,-1.0));
        light.setColor(new Color3f(1.0, 1.0, 1.0));
        objMove.addChild(light);
    }
     
    function connect( canvas3D, scene ) {
        var universe = new SimpleUniverse(canvas3D);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  9. Hello, Java 2D(Rhino) World!

    Posted on 12月 23rd, 2012 by cx20

    Java 2D(Rhino)

    Java 2D は Java による 2D グラフィックライブラリである。
    以下は Rhino による Java 2D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    canvas = new Canvas();
     
    frame.add(canvas);
    frame.setVisible(true);
     
    canvas.createBufferStrategy(2);
    strategy = canvas.getBufferStrategy();
    g2 = strategy.getDrawGraphics();
    while(true)
    {
        g2.drawString("Hello, Java 2D World!", 0, 16 );
        strategy.show();
        java.lang.Thread.sleep(200);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    コンパイル&実行方法

    C:¥> jrunscript hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  10. Hello, SWT(Rhino) World!

    Posted on 12月 21st, 2012 by cx20

    SWT(Rhino)

    SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
    IBM により AWT や Swing を置き換える目的で作成された。
    以下は Rhino による SWT の使用例となっている。

    ソースコード

    importPackage(org.eclipse.swt);
    importPackage(org.eclipse.swt.widgets);
    importPackage(org.eclipse.swt.layout);
     
    var display = new Display();
    var shell = new Shell(display);
    shell.setText("Hello, World");
     
    var layout = new FillLayout(SWT.VERTICAL);
    shell.setLayout(layout);
     
    var label = new Label(shell,SWT.BORDER);
    label.setText("Hello, SWT World!");
     
    shell.setSize( 640, 480 );
    shell.open();
     
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
     
    display.dispose();

    実行方法

    C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, SWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+