Archive for 11月, 2012

  1. Hello, Java 3D(Jython) World!

    Posted on 11月 30th, 2012 by cx20

    Java 3D

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

    ソースコード

    from java.lang import Math
    from java.awt import BorderLayout
    from java.awt import GraphicsConfiguration
    from java.awt import Font
    from javax.media.j3d import Canvas3D
    from javax.media.j3d import BranchGroup
    from javax.media.j3d import Transform3D
    from javax.media.j3d import TransformGroup
    from javax.media.j3d import Appearance
    from javax.media.j3d import Material
    from javax.media.j3d import Font3D
    from javax.media.j3d import FontExtrusion
    from javax.media.j3d import Text3D
    from javax.media.j3d import Shape3D
    from javax.media.j3d import DirectionalLight
    from javax.media.j3d import RotationInterpolator
    from javax.media.j3d import Alpha
    from javax.media.j3d import BoundingSphere
    from javax.swing import JFrame
    from javax.vecmath import Vector3f
    from javax.vecmath import Color3f
    from com.sun.j3d.utils.universe import SimpleUniverse
     
    class HelloFrame(JFrame):
        def __init__(self, title ):
            self.setTitle(title)
            self.setSize(640, 480)
            self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
            canvas3D = self.createCanvas3D()
            scene = self.createSceneGraph()
            self.connect(canvas3D, scene)
     
        def createCanvas3D(self):
            self.getContentPane().setLayout(BorderLayout())
            config = SimpleUniverse.getPreferredConfiguration()
            canvas3D = Canvas3D(config)
            self.getContentPane().add(canvas3D)
            return canvas3D
     
        def createSceneGraph(self):
            objRoot = BranchGroup()
            mover = self.moveTextBack()
            spinner = self.createSpinner()
            rotator = RotationInterpolator(Alpha(-1, 4000), spinner, Transform3D(), 0.0, Math.PI * 2)
            rotator.setSchedulingBounds( BoundingSphere() )
            spinner.addChild(rotator)
            objRoot.addChild(mover)
            mover.addChild(spinner)
            spinner.addChild(self.createTextShape())
            self.setLighting(mover)
            return objRoot
     
        def createSpinner(self):
            spinner = TransformGroup()
            spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE)
            return spinner
     
        def moveTextBack(self):
            transform3D = Transform3D()
            transform3D.setTranslation(Vector3f(0.0, 0.0, -10.0))
            return TransformGroup(transform3D)
     
        def createTextShape(self):
            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
     
        def setLighting(self,objMove):
            light = DirectionalLight()
            light.setInfluencingBounds(BoundingSphere())
            light.setDirection(Vector3f(0.0,0.0,-1.0))
            light.setColor(Color3f(1.0, 1.0, 1.0))
            objMove.addChild(light)
     
        def connect(self,canvas3D, scene):
            universe = SimpleUniverse(canvas3D)
            universe.getViewingPlatform().setNominalViewingTransform()
            universe.addBranchGraph(scene)
     
    if __name__ == '__main__':
        frame = HelloFrame("Hello, World")
        frame.setVisible(True)

    実行方法

    C:¥> jython Hello.rb

    実行結果

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

    Posted on 11月 29th, 2012 by cx20

    Java 2D

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

    ソースコード

    import java
     
    from java.awt import Graphics
    from java.awt import Graphics2D
    from javax.swing import JFrame
    from javax.swing import JPanel
     
    class HelloFrame(JFrame):
        def __init__(self,title):
            self.setTitle( title )
            self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
            self.setSize(640, 480)
     
            panel = HelloPanel()
            self.add( panel )
     
    class HelloPanel(JPanel):
        def paintComponent(self,g):
            g.drawString("Hello, Java2D World!", 0, 16)
     
    if __name__ == '__main__':
        frame = HelloFrame("Hello, World")
        frame.setVisible(True)

    コンパイル&実行方法

    C:¥> jython Hello.py

    実行結果

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

    Posted on 11月 28th, 2012 by cx20

    JavaFX(Jython)

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

    ソースコード

    import sys
    from javafx.application import Application
    from javafx.scene import Group
    from javafx.scene import Scene
    from javafx.scene.layout import HBox
    from javafx.scene.control import Label
    from javafx.util import Callback
     
    class HelloApplication(Application):
        def start(self, stage):
            hbox = HBox()
            scene = Scene( hbox, 640, 480 )
            hbox.getChildren().add( Label( "Hello, JavaFX World!" ) )
            stage.setScene( scene )
            stage.setTitle( "Hello, World" )
            stage.show()
     
    if __name__ == "__main__":
        Application.launch(HelloApplication().class, sys.argv[1:])

    実行方法

    C:¥> SET JAVAFX_HOME=C:\Program Files (x86)\Oracle\JavaFX 2.0 SDK
    C:¥> SET CLASSPATH=%JAVAFX_HOME%\rt\lib\jfxrt.jar;%CLASSPATH%
    C:¥> jython Hello.py

    実行結果

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

    Posted on 11月 27th, 2012 by cx20

    SWT(Jython)

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

    ソースコード

    from java.lang import System
    from org.eclipse.swt import SWT
    from org.eclipse.swt.widgets import Display
    from org.eclipse.swt.widgets import Shell
    from org.eclipse.swt.widgets import Label
    from org.eclipse.swt.layout import FillLayout
     
    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 not shell.isDisposed():
        if not display.readAndDispatch():
            display.sleep()
     
    display.dispose()

    実行方法

    C:¥> SET CLASSPATH=org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;%CLASSPATH%
    C:¥> jython Hello.py

    実行結果

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

    Posted on 11月 26th, 2012 by cx20

    Swing(Jython)

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

    ソースコード

    from java.lang import System
    from javax.swing import JFrame
    from javax.swing import JLabel
     
    class HelloFrame(JFrame):
        def __init__(self):
            self.setTitle( "Hello, World" )
            self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
            self.setSize( 640, 480 )
     
            label = JLabel( "Hello, Swing World!" )
            label.setVerticalAlignment( JLabel.TOP )
            self.add( label )
     
    if __name__ == '__main__':
        frame = HelloFrame()
        frame.setVisible(True)

    実行方法

    C:¥> jython Hello.py

    実行結果

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

    Posted on 11月 25th, 2012 by cx20

    AWT(Jython)

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

    ソースコード

    from java.lang import System
    from java.awt import Frame
    from java.awt import Label
    from java.awt import FlowLayout
    from java.awt.event import WindowAdapter
     
    class HelloFrame(Frame):
        def __init__(self):
            self.setTitle( "Hello, World" )
            self.addWindowListener(HelloWindowAdapter())
            self.setSize( 640, 480 )
     
            self.setLayout( FlowLayout(FlowLayout.LEFT) )
     
            label = Label( "Hello, AWT World!" )
            self.add( label )
     
    class HelloWindowAdapter(WindowAdapter):
        def windowClosing(self, event):
            System.exit(0)
     
    if __name__ == '__main__':
        frame = HelloFrame()
        frame.setVisible(True)

    実行方法

    C:¥> jython Hello.py

    実行結果

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

    Posted on 11月 24th, 2012 by cx20

    Java 3D

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

    ソースコード

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

    実行方法

    C:¥> jrubyw Hello.rb

    実行結果

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

    Posted on 11月 23rd, 2012 by cx20

    Java 2D

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

    ソースコード

    require 'java'
     
    import 'java.awt.Graphics'
    import 'java.awt.Graphics2D'
    import 'javax.swing.JFrame'
    import 'javax.swing.JPanel'
     
    class HelloFrame < JFrame
        def initialize( title )
            super( title )
            self.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE)
            self.setSize(640, 480)
     
            @panel = HelloPanel.new()
            add( @panel )
        end
    end
     
    class HelloPanel < JPanel
        def paintComponent(g)
            @g2 = g
            @g2.drawString("Hello, Java2D World!", 0, 16)
        end
    end
     
    @frame = HelloFrame.new("Hello, World")
    @frame.setVisible(true)

    コンパイル&実行方法

    C:¥> jrubyw Hello.rb

    実行結果

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

    Posted on 11月 22nd, 2012 by cx20

    JavaFX(Scala)

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

    ソースコード

    require 'jrubyfx'
     
    class Hello
      include JRubyFX
     
      def start(stage)
        hbox = HBox.new
        hbox.children << Label.new("Hello, JavaFX World!")
     
        stage.scene = Scene.new(hbox, 640, 480)
        stage.title = "Hello, World"
        stage.show
      end
    end
     
    Hello.start

    実行方法

    C:¥> jruby --1.9 Hello.rb

    実行結果

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

    Posted on 11月 21st, 2012 by cx20

    SWT(JRuby)

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

    ソースコード

    require 'java'
    require 'org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar'
     
    import 'org.eclipse.swt.SWT'
    import 'org.eclipse.swt.widgets.Display'
    import 'org.eclipse.swt.widgets.Shell'
    import 'org.eclipse.swt.widgets.Label'
    import 'org.eclipse.swt.layout.FillLayout'
     
    @display = Display.new
    @shell = Shell.new(display)
    @shell.setText("Hello, World")
     
    @layout = FillLayout.new(SWT::VERTICAL)
    @shell.setLayout(@layout)
     
    @label = Label.new(@shell,SWT::BORDER)
    @label.setText("Hello, SWT World!")
     
    @shell.setSize( 640, 480 )
    @shell.open
     
    while (!@shell.isDisposed) do
      if (!@display.readAndDispatch) then
        @display.sleep
      end
    end
     
    @display.dispose

    実行方法

    C:¥> jrubyw Hello.rb

    実行結果

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