Archive for 11月, 2012

  1. Hello, Swing(JRuby) World!

    Posted on 11月 20th, 2012 by cx20

    Swing(JRuby)

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

    ソースコード

    require 'java'
     
    import 'javax.swing.JFrame'
    import 'javax.swing.JLabel'
     
    class Hello < JFrame
      def initialize(title)
        super( title )
        self.setDefaultCloseOperation( JFrame::EXIT_ON_CLOSE )
        self.setSize( 640, 480 )
     
        @label = JLabel.new( "Hello, Swing World!" )
        @label.setVerticalAlignment(JLabel::TOP)
        self.add( @label )
      end
    end
     
    @frame = Hello.new( "Hello, World" )
    @frame.setVisible( true )

    実行方法

    C:¥> jrubyw Hello.rb

    実行結果

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

    Posted on 11月 19th, 2012 by cx20

    AWT(JRuby)

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

    ソースコード

    require "java"
     
    import java.lang.System
    import java.awt.Frame
    import java.awt.Label
    import java.awt.FlowLayout
    import java.awt.event.WindowAdapter
     
    class Hello < Frame
      def initialize(title)
        super(title)
        self.addWindowListener(HelloWindowAdapter.new)
        self.setSize(640, 480)
     
        self.setLayout(FlowLayout.new(FlowLayout::LEFT))
     
        @label = Label.new('Hello, AWT World!')
        self.add(@label)
      end
    end
     
    class HelloWindowAdapter < WindowAdapter
      def windowClosing(e)
        System.exit(0)
      end
    end
     
    @frame = Hello.new('Hello, World')
    @frame.setVisible(true)

    実行方法

    C:¥> jrubyw Hello.rb

    実行結果

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

    Posted on 11月 18th, 2012 by cx20

    Java 3D

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

    ソースコード

    import javax.media.j3d._
    import javax.swing.JFrame
    import javax.vecmath.Vector3f
    import javax.vecmath.Color3f
    import java.awt.BorderLayout
    import java.awt.GraphicsConfiguration
    import java.awt.Font
    import com.sun.j3d.utils.universe.SimpleUniverse
     
    object Hello {
        def main(args: Array[String]) {
            var frame = new HelloFrame("Hello, World")
            frame.setVisible(true)
        }
    }
     
    class HelloFrame( title: String ) extends JFrame {
        setTitle(title)
        setSize(640, 480)
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
        var canvas3D = createCanvas3D()
        var scene = createSceneGraph()
        connect(canvas3D, scene)
     
        def createCanvas3D(): Canvas3D = {
            getContentPane().setLayout(new BorderLayout())
            var config = SimpleUniverse.getPreferredConfiguration()
            var canvas3D = new Canvas3D(config)
            getContentPane().add(canvas3D)
            return canvas3D
        }
     
        def createSceneGraph(): BranchGroup = {
            var objRoot = new BranchGroup()
            var mover = moveTextBack()
            var spinner = createSpinner()
            var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0f, Math.Pi.toFloat * 2.0f)
            rotator.setSchedulingBounds( new BoundingSphere() )
            spinner.addChild(rotator)
            objRoot.addChild(mover)
            mover.addChild(spinner)
            spinner.addChild( createTextShape())
            setLighting(mover)
            return objRoot
        }
     
        def createSpinner(): TransformGroup = {
            var spinner = new TransformGroup()
            spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE)
            return spinner
        }
     
        def moveTextBack(): TransformGroup = {
            var transform3D = new Transform3D()
            transform3D.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f))
            return new TransformGroup(transform3D)
        }
     
        def createTextShape(): Shape3D = {
            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
        }
     
        def setLighting(objMove: TransformGroup) {
            var light = new DirectionalLight()
            light.setInfluencingBounds(new BoundingSphere())
            light.setDirection(new Vector3f(0.0f,0.0f,-1.0f))
            light.setColor(new Color3f(1.0f, 1.0f, 1.0f))
            objMove.addChild(light)
        }
     
        def connect(canvas3D: Canvas3D, scene: BranchGroup) {
            var universe = new SimpleUniverse(canvas3D)
            universe.getViewingPlatform().setNominalViewingTransform()
            universe.addBranchGraph(scene)
        }
    }

    実行方法

    C:¥> scalac Hello.scala
    C:¥> scala Hello

    実行結果

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

    Posted on 11月 17th, 2012 by cx20

    Java 2D

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

    ソースコード

    import java.awt.Graphics
    import java.awt.Graphics2D
    import javax.swing._
     
    object Hello {
        def main(args: Array[String]) {
            var frame = new HelloFrame("Hello, World")
            frame.setVisible(true)
        }
    }
     
    class HelloFrame( title: String ) extends JFrame {
        setTitle( title )
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
        setSize(640, 480)
     
        var panel = new HelloPanel()
        add( panel )
    }
     
    class HelloPanel extends JPanel {
        override def paintComponent(g: Graphics) {
            var g2 = g
            g2.drawString("Hello, Java2D World!", 0, 16)
        }
    }

    コンパイル&実行方法

    C:¥> scalac Hello.scala
    C:¥> scala Hello

    実行結果

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

    Posted on 11月 16th, 2012 by cx20

    JavaFX(Scala)

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

    ソースコード

    import javafx.application.Application
    import javafx.stage.Stage
    import javafx.scene.Scene
    import javafx.scene.layout.HBox
    import javafx.scene.control.Label
     
    object Hello {
        def main(args: Array[String]) {
            Application.launch(classOf[HelloApplication], args:_*)
        }
    }
     
    class HelloApplication extends Application {
        def start(stage: Stage) {
            var hbox = new HBox()
            var scene = new Scene(hbox, 640, 480)
            hbox.getChildren().add( new Label("Hello, JavaFX World!") )
     
            stage.setScene(scene)
            stage.setTitle("Hello, World")
            stage.show()
        }
    }

    コンパイル&実行方法

    C:¥> SET JAVAFX_HOME=C:\Program Files (x86)\Oracle\JavaFX 2.0 SDK
    C:¥> scalac -cp "%JAVAFX_HOME%\rt\lib\jfxrt.jar;." Hello.scala
    C:¥> scala -cp "%JAVAFX_HOME%\rt\lib\jfxrt.jar;." Hello

    実行結果

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

    Posted on 11月 15th, 2012 by cx20

    SWT(Scala)

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

    ソースコード

    import org.eclipse.swt.SWT
    import org.eclipse.swt.widgets._
    import org.eclipse.swt.layout._
     
    object Hello {
        def main (args: Array[String]) {
            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:¥> scalac -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.scala
    C:¥> scala -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello

    実行結果

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

    Posted on 11月 14th, 2012 by cx20

    Swing(Scala)

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

    ソースコード

    import java.awt._
    import java.awt.event._
    import javax.swing._
     
    object Hello {
        def main( args: Array[String] ) {
            var frame = new HelloFrame( "Hello, World" )
            frame.setVisible( true )
        }
    }
     
    class HelloFrame( title: String ) extends JFrame {
        setTitle( title )
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
        setLocationRelativeTo( null )
        setSize( 640, 480 )
     
        var label = new JLabel( "Hello, Swing World!" )
        label.setVerticalAlignment(SwingConstants.TOP)
        add( label )
    }

    コンパイル&実行方法

    C:¥> scalac Hello.scala
    C:¥> scala Hello

    実行結果

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

    Posted on 11月 13th, 2012 by cx20

    AWT(Scala)

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

    ソースコード

    import java.awt._
    import java.awt.event._
     
    object Hello {
        def main(args: Array[String]) {
            var frame = new HelloFrame( "Hello, World" )
            frame.setVisible(true)
        }
    }
     
    class HelloFrame( title: String ) extends Frame {
        setTitle( title )
        addWindowListener(new HelloWindowAdapter())
        setSize(640, 480)
     
        setLayout(new FlowLayout(FlowLayout.LEFT))
     
        var label = new Label("Hello, AWT World!")
        add(label)
    }
     
    class HelloWindowAdapter extends WindowAdapter {
        override def windowClosing( e: WindowEvent ) {
            System.exit(0)
        }
    }

    コンパイル&実行方法

    C:¥> scalac Hello.scala
    C:¥> scala Hello

    実行結果

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

    Posted on 11月 12th, 2012 by cx20

    Java 3D

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

    ソースコード

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

    実行方法

    C:¥> groovyw Hello.groovy

    実行結果

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

    Posted on 11月 11th, 2012 by cx20

    Java 2D

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

    ソースコード

    import java.awt.Graphics
    import java.awt.Graphics2D
    import javax.swing.*
     
    class Hello extends JFrame {
     
        static void main(args) {
            Hello frame = new Hello("Hello, World")
            frame.setVisible(true)
        }
     
        Hello( String title ) {
            super( title )
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
            setSize(640, 480)
     
            HelloPanel panel = new HelloPanel()
            add( panel )
        }
    }
     
    class HelloPanel extends JPanel {
        public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D)g
            g2.drawString("Hello, Java2D World!", 0, 16)
        }
    }

    コンパイル&実行方法

    C:¥> groovyw Hello.groovy

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+